Abstract
Guinea-Bissau has no address in common use below the name of a town, a bairro or a tabanca: a four-digit postcode format was registered with the Universal Postal Union in 2005, but only two codes are attested, and two buildings in the country’s open map carry a house number. We present an addressing model in which every compound (morança or quintal) receives a code formed by a place name people already use and a short number, such as Bandim 537. Places that share a name draw their numbers from one national range for that name, divided into frozen blocks, so the spoken code identifies one home in the whole country without any qualifier. Numbers follow a Hilbert curve, so that neighbours receive neighbouring numbers; a Damm check digit protects the machine form; a spot code locates any point offline. Computed from 419,593 building footprints, the model assigned 241,673 codes in 3,336 places and 39 sectors. We give the complete mathematics, a reference implementation, an open registry and a deployable server, and we measure uniqueness, length, error detection and decoding accuracy on the full registry. Separate chapters estimate the benefits for citizens, logistics, emergency services and government planning, with their assumptions and sensitivity ranges.
Keywords: street addressing; geocoding; postcodes; Hilbert curve; check digits; building footprints; Guinea-Bissau.
1 Introduction
An address is a piece of public infrastructure. It lets a household receive a letter, a parcel or a visitor; it lets an ambulance reach a patient; it lets a utility, a bank or a ministry refer to the same dwelling without describing it. The Universal Postal Union estimates that a large share of the world’s population lives without a usable address, and it treats addressing as a precondition for postal service, financial inclusion and civil registration [1]. The World Bank’s review of street addressing in African cities reached a similar conclusion, adding that addressing programmes fail when residents do not adopt them [2].
Guinea-Bissau is a clear case. Its postcode format exists on paper, but only two codes are attested, both in Bissau [3]; doors are not numbered outside a few central streets; and the two most common ways of describing a home are the name of the bairro or tabanca and a landmark. A delivery depends on a telephone call, an ambulance crew depends on local knowledge, and a family abroad cannot write a destination that a courier can check.
This paper describes and evaluates an addressing model built for this setting. Its unit is the compound, the morança or walled quintal where a family lives. Its code is a place word that people already say, followed by a short number: Bandim 537. Its design goals, in order, are that people remember the code and obtain it without effort; that the spoken code is unique in the whole country on its own; that it leads to the compound’s gate; that it works offline; and that no code ever changes or is reused.
Our contributions are the following.
- A code form, and the arithmetic behind it, in which every place that shares a name draws its numbers from one national range for that name, divided into frozen blocks. The spoken form thus needs no sector, town or position to be decoded (Section 4).
- A complete specification of every step, from building footprints to compounds, places, plate names, name keys, blocks, numbering, check digit and spot codes, with each formula and a worked example on a real code (Section 4).
- An open implementation: a reference engine, conformance vectors, the full registry of 241,673 codes, and a server that any institution can deploy to answer queries and, if designated, issue codes by the same rules (Section 5).
- An evaluation on the full registry of uniqueness, code length, coverage, error detection and decoding accuracy (Section 6), and a record of the alternative designs we measured and rejected (Section 7).
- Estimates, with stated assumptions and sensitivity ranges, of the model’s value for citizens, for logistics and commerce, for emergency services and for government planning (Sections 8 to 11).
Section 2 reviews the country’s existing systems and the international literature, and Section 3 the data. Section 12 addresses privacy, safety and governance, Section 13 the limitations and future work, and Section 14 concludes.
3 Data and sources
Building footprints. The model starts from 419,593 building footprints after removing outlines under 6 m². Of these, 99,131 are from OpenStreetMap [12] and 320,462 are machine-learned footprints from Google Open Buildings [21] and Microsoft [22], which we obtained through the Overture Maps buildings theme [23], keeping only footprints that do not overlap an OpenStreetMap outline. Figure 1 shows their distribution by region: OpenStreetMap is the larger source only in the Bolama-Bijagós region, where volunteers have traced the islands in detail, and machine-learned footprints dominate elsewhere. Their height attribute is a rendering placeholder, so the model never uses it.
Boundaries and islands. The 39 sectors (38 setores and the Setor Autónomo de Bissau) come from OpenStreetMap’s administrative boundaries, cross-checked against geoBoundaries and the PCGN list [6], and were frozen on 18 October 2026. The 189 island and islet polygons come from the same extract.
National border. The national border is OpenStreetMap’s administrative boundary of Guinea-Bissau at admin_level 2 (relation 192776, ISO3166-1=GW), ODbL. It decides which buildings belong to the country: a footprint, a compound or an entrance counts only when it lies inside that border or within 300 m of it, whatever a sector outline or another source of outlines (geoBoundaries, GADM) says, because outlines from different sources can spill over a border. The 300 m allow for footprints drawn across the line and for the precision of the line itself. Every code in the registry has its entrance inside the border or within that distance.
Places. Place points come from OpenStreetMap (bairros, towns, villages, hamlets, named moranças) and then from GeoNames. A GeoNames locality is kept only when no OpenStreetMap place lies within 400 m and none of the same name within 1.5 km. The place table holds 4,221 places and 39 sector words.
Enclosures and gates. Walls, fences, hedges, farmyard outlines (landuse=farmyard, 782 in the extract) and gates are taken from OpenStreetMap.
Statistics. Population, households, languages and literacy are from the census and international statistics cited in Section 2. Every count in this paper that concerns codes is computed from the published registry, and the scripts that compute the figures are in the repository (tools/paper_figures.py).
4 The model
4.1 Design principles
The model follows nine principles, in order of priority.
- Memorable and effortless. A code is a place word people already use and a short number; obtaining it takes one tap.
- Unique on its own. The spoken code identifies one home in the country with no town, sector, island or position.
- The compound and its gate. The unit is the morança or quintal; its structures are sub-units; navigation ends at the gate.
- Official first. Where a government address exists, it is shown first, as the government writes it.
- Offline. Spot codes, place words and check digits are computable without a network.
- Stable. A code never moves and is never reused; regrouping, renaming and new boundaries never change an issued code.
- Places, never people. No name or detail of a resident is stored.
- Open and transferable. Engine, registry and rules are open and designed to be handed to the State.
- National. The model and its engine are specific to Guinea-Bissau.
4.2 The forms of a code
A code has three equivalent forms. The remembered form is the place’s plate name followed by the number ; it is what people say, type and write, and it is also the written form used on plates and parcels. The machine form is
Bandim 537.2, 10-022-00537.2-c). Only the machine form carries the check digit: people never see it. A spot code (Section 4.13) names any point without a compound.
| Form | Example | Used by |
|---|---|---|
| Remembered and written | Bandim 537 | people: said, typed, painted on the gate |
| Machine | 10-022-00537-4 | systems, QR codes, partners |
| Structure | Bandim 537.2 | a second building of the compound |
| Spot | 10-4327-9117 | any point without a compound |
4.3 Sectors
Each of the 39 sectors has a two-digit number whose first digit is its region (1 Bissau, 2 Bafatá, 3 Bolama, 4 Biombo, 5 Cacheu, 6 Gabú, 7 Oio, 8 Quinara, 9 Tombali), a three-letter key, and its own spot grid (Section 4.13). Bissau is sector 10; numbers 11 to 19 are reserved should the city be divided into districts. A point belongs to the sector whose outline contains it, by ray casting with holes excluded:
where is the outline of sector and the distance from to the national border , zero inside it. Points at sea or abroad have no sector. The border decides: a point more than 300 m outside the national border has no sector even where a sector outline holds it, so no building in a neighbouring country ever receives a code. The engine carries simplified by Douglas–Peucker at 50 m, whose largest distance from the true line is 50.2 m, and accepts a point at most 248 m outside it, so no accepted point lies more than 300 m outside the true border. Grouping applies the same test to every footprint and compound before any number is given, and the registry server applies it to every new code and every moved entrance. Figure 2 shows the outlines and the density of compounds.
| Region | Sectors | Compounds |
|---|---|---|
| Setor Autónomo de Bissau | 10 Bissau | 43,850 |
| Gabú | 61 Boé, 62 Gabú, 63 Pirada, 64 Pitche, 65 Sonaco | 43,414 |
| Cacheu | 51 Bigene, 52 Bula, 53 Cacheu, 54 Caió, 55 Canchungo, 56 São Domingos | 35,431 |
| Bafatá | 21 Bafatá, 22 Bambadinca, 23 Contuboel, 24 Galomaro, 25 Gã-Mamudo, 26 Xitole | 34,427 |
| Oio | 71 Bissorã, 72 Farim, 73 Mansabá, 74 Mansoa, 75 Nhacra | 29,493 |
| Biombo | 41 Prábis, 42 Quinhamel, 43 Safim | 21,852 |
| Tombali | 91 Bedanda, 92 Cacine, 93 Catió, 94 Komo, 95 Quebo | 16,101 |
| Quinara | 81 Buba, 82 Empada, 83 Fulacunda, 84 Tite | 9,131 |
| Bolama | 31 Bolama, 32 Bubaque, 33 Caravela, 34 Uno | 7,974 |
| Total | 39 | 241,673 |
4.4 Compounds: grouping structures
A family home in Guinea-Bissau is usually several structures. A rural morança has a main house, kitchens, stores and sometimes round houses around a yard; a Bissau quintal is often walled. The footprints reflect this: a quarter are under 33 m² and half are over 116 m², and in Gabú region the median is 41 m², because the Fula and Mandinka compounds of the east consist of many small houses. Numbering buildings would give a family several codes; we therefore group footprints into compounds before any number is assigned.
Settlement class. For each footprint, the density of footprints in the 250 m square centred on it (five cells of 50 m in each direction) determines a settlement class:
(1)
Gap between structures. For footprints and with centroids and areas , we approximate the gap between their walls by
The rules below are applied in order. Structures are first sorted by sector, latitude, longitude, area and identifier, so that the result never depends on the order in which map data arrives.
| Rule | Condition | Effect |
|---|---|---|
| Enclosure | centroid inside a mapped wall, fence, hedge, farmyard ( ha), residential plot ( m²) or institutional site | the enclosure is one compound |
| Annex | m² and to a structure | joins the nearest structure |
| Houses | both m² and | single-linkage into one compound |
| Cap | a group of more than 12 structures | re-linked with halved distances until every group has at most 12 |
| Class | (annex) | (houses) |
|---|---|---|
| cidade | 6 m | 3 m |
| vila | 10 m | 6 m |
| tabanca | 15 m | 12 m |
| disperso | 20 m | 15 m |
Result. The rules yield 241,673 compounds from 419,593 footprints: 144,820 compounds of one structure, 56,535 of two, 21,794 of three and 18,524 of four or more (mean 1.74). Of all footprints, 65.5 % belong to a compound of two or more structures, from 58 % in Bissau to 71 % in Oio; 763 compounds come from mapped enclosures. With about 301,000 households in the census, there are about 1.25 households per compound, consistent with family compounds that house more than one household.
Validation. We re-ran the proximity rules with the enclosures that mappers drew hidden and compared the result with those enclosures. Of 159 mapped rural moranças, 58 % are recovered whole and 46 % exactly, and a further 24 % miss only one structure. In 53 walled urban plots only 13 % are recovered whole: inside a Bissau wall the buildings stand far apart, while neighbours across the wall stand close. The rule is deliberately cautious in town, because the two errors are not symmetric: merging two codes later costs nothing (one becomes an alias), whereas splitting a wrong merge would give a family a new code.
4.5 Places and the point-to-place rule
The place word is a Bissau bairro (including the former villages the city has absorbed, which are bairro names today: Plaque, Jal, Bono, Quetene, Cuntum), a town or one of its bairros, a village, a hamlet or a morança cluster. A compound in sector on land mass takes the nearest place of its own sector and land mass within 3 km, and otherwise the sector’s own word:
Of the 4,221 places, 3,336 hold at least one compound. Thirty-seven sectors use their own word for 5,430 compounds that lie more than 3 km from any named place. A disputed or renamed bairro never changes a code: the new name becomes an alias.
4.6 Plate names
The word in a code must be short enough to say together with a number. We call the admissible short form the plate name, and require
where counts characters in Unicode normal form C (an accented letter counts once), are the parts separated by spaces or hyphens, and de, da, do, das, dos, d, e, o, a, os, as, em, na, no, di, du is the set of linking words.
A name that fails Eq. (6) goes through fixed steps: a documented short form already in use; cleaning (brackets, “Bairro de”, “Tabanca de”, “Morança” and generic words: “Bairro Ajuda II Phase” becomes Ajuda II); abbreviation of a saint prefix (Sto António); and otherwise selection of the most distinctive run of one or two whole words. Each candidate run is scored by the mean frequency of its words among all place names in the country,
where is the number of place names containing word . The run with the lowest score is taken, with a preference for the end of the name, only if it is ahead of the next by a factor of at least 1.5. Thus “Sinchã Malam Baio” becomes Malam Baio and “Missirá Ama Sidi” becomes Ama Sidi. Settlement heads (Sinchã, Sare, Madina, Gã, Ponta, Ilhéu) are dropped first and are never a plate name alone. The names of the peoples after whom a tabanca is named (Balanta, Mancanha, Papel, Fula, Beafada) are never dropped automatically, because “Bambadinca Balanta” and “Bambadinca Mancanha” are two villages.
When no short form is clearly right, the place is flagged for the Câmara Municipal in Bissau, or for the sector administration with the régulos and the community, with up to three candidates. Of the 3,336 places in use, 2,807 keep their name, 17 are cleaned, 119 are shortened, 37 are sector words and 356 are flagged, 28 of which still exceed the limit. The 21,759 codes in flagged places were issued with the provisional name. The council’s choice may change the word once; the official name always remains an alias.
4.7 The name key
Two names that sound or look alike must never be distinguishable only by the listener, so they share a name key and, with it, one national number range. The key of a word is a composition of normalisation steps,
where lowers case, reads ç as s and removes accents; replaces every character other than a–z and 0–9 by a space; removes a leading Bairro, Tabanca, Aldeia, Povoação or Morança (with a following de, da or do); expands the abbreviations Sto, Sta, a leading S. and N. Sra; sets aside a trailing numeral I–X or 1–10 as the Roman numeral ; removes the small words de, da, do, dos, das, e, o, a, os, as when more remains; and folds spellings of one sound to one letter, as follows. A final que becomes k; tch, ch and sh become x; ck and qu become k; gu becomes g; ph becomes f; nh becomes n; lh becomes l; c before e or i becomes s and any other c becomes k; z becomes s, y becomes i, w becomes u; h is dropped; the Kriol vowel spellings are merged (e with i, o with u); and doubled letters are reduced to one. The suffix is present only when a numeral was set aside.
Thus Sintchã Dulo, Sinchã Duló and Sincha Dulu share the key sinxadulu; Plack and Plaque share plak; Áfià and Hafia share afia; while Plaque II (plak#ii) is a name of its own. Because a word typed without its cedilla (Praca for Praça) would otherwise fold c to k, every name containing ç also resolves from its cedilla-free spelling (Section 6.2). The folding errs towards merging on purpose: joining two names costs only a longer range, whereas keeping apart two names that sound alike would give two homes the same spoken code.
Applied to the 4,221 places and 39 sector words, Eq. (8) gives 3,295 name keys, 2,704 of which hold compounds. Of these, 407 names are shared by two or more places in use, over 1,039 places and 92,745 compounds (38 % of the total); 183 names are repeated within a single sector. Missirá has the most places (14), followed by Áfià (13), Madina (12) and Amedalai (11).
4.8 One national range per name
Because a name is said without its town, all places that share a name key draw their numbers from one national range , divided into one block per place. A number falls in exactly one block, so a name and a number decode to exactly one place.
Block size. A place with compounds at first issue receives the smallest block of the 1–2–5 series that holds four times its compounds:
(5)
The factor four follows from the numbering rule of Section 4.9: the first issue uses every second number, so half of the block is consumed by the initial compounds and the numbers between them; the other half is left for the place’s growth.
Block placement. The places of one name are taken largest first, places awaiting a council’s choice of plate name after the others, and each block starts at the name’s high-water mark rounded up to a multiple of a power of ten matched to its size:
Worked example. Bandim, a bairro of Bissau (sector 10, place 022), had compounds at first issue and is the largest place of its name, so , and its block is 0–1,999. Fourteen places share the name Missirá; Figure 3 shows how their blocks divide the range. Missira 101 is in Bissau and Missirá 5101 in Sonaco; neither needs its sector.
| Place | Sector | Compounds | Block |
|---|---|---|---|
| Missira | Bissau | 771 | 0–4,999 |
| Missirá | Sonaco | 81 | 5,000–5,499 |
| Missirá | Gabú | 53 | 5,500–5,999 |
| Missirá | Bafatá | 49 | 6,000–6,199 |
| Missirá | Bissorã | 44 | 6,200–6,399 |
| Missirá | Bambadinca | 30 | 6,400–6,599 |
| … eight more | 113 | up to 7,249 |
Growth horizon. At first issue a place uses odd numbers up to within a block of at least , so it can hold four times its initial compounds before it needs a further block. At a constant growth rate , that takes
(10)
Frozen table. The block table was frozen at first issue on 20 October 2026. A block is never moved, renumbered or shrunk. A new place with an existing name, or a place whose block fills, receives a further block above the name’s high-water mark by Eq. (10).
The largest shared range is Áfià’s (13 places, 2,560 compounds), which ends at 15,719. No name approaches 99,999, so no qualifier is needed.
4.9 Numbering within a place: the Hilbert curve
Inside its block, a place’s compounds are numbered along a Hilbert curve [24], so that neighbours on the ground receive neighbouring numbers, as house numbers do along a street. Among space-filling curves, the Hilbert curve has the best clustering properties: a compact region of the plane maps to few contiguous runs of the curve [25].
The grid. Each sector has a frame of cells with south-west corner , reference latitude and cell size in metres (1.7 m in Bissau, up to 9.4 m in Gabú). A point lies in the cell
The curve. The Hilbert index on a curve of order 14 ( cells a side, enclosing the grid) is computed from the most significant bit down. With and, for ,
where is bitwise exclusive or. Figure 4 shows the curve of order 3 computed by the reference engine.
First issue. The compounds of a place with block , sorted by where the key is the stable identifier of the compound’s main structure, receive
(12)
The even numbers between neighbours remain free for compounds built later between them.
Worked example: Bandim 537. The compound nearest Bandim market has its entrance point at , . In Bissau’s frame (, , , m), Eq. (12) gives the cell and Eq. (13) the Hilbert index . It is the 269th of Bandim’s 452 compounds along the curve (), so Eq. (14) gives . Figure 5 shows the whole bairro.
4.10 A new home
A new compound between its Hilbert neighbours (the issued number just before it along the curve) and (just after), with indices , takes the free number nearest its proportional position :
If no number is free between and , or the compound comes after the last one, it takes the place’s highest number plus one, if that is still in the block; otherwise the next block of the place, and if all are full a continuation block sized by Eq. (9) and placed by Eq. (10). A retired number is never reused.
4.11 Decoding without context
To decode a remembered form, the trailing digits are the number and the words before them the name . The name key gives the national range, and the number gives the one block that holds it:
4.12 The check digit
The machine form carries one decimal check digit computed with Damm’s algorithm [26], [27] over the payload (ten digits, followed by the structure number if there is one):
where are the payload digits and is the operation table of a totally anti-symmetric quasigroup of order 10:
(16)
Each row and column of is a permutation, so every single wrong digit changes the result. The table is totally anti-symmetric, that is, implies , so every exchange of two different adjacent digits is detected as well. These are the two most frequent errors in the transcription of decimal codes [28].
Worked example. The name Bandim has the national number , so the payload of Bandim 537 is 0022800537. The successive values of are 0, 0, 1, 9, 9, 2, 4, 4, 3, 4, and the check digit is 4: the machine form is 10-022-00537-4. A partner system that receives 10-022-00573-4, with two digits exchanged, finds that the check digit of 0022800573 is not 4 and refuses the code.
Binding the place. The place is not in the payload; it follows from the name and the number through the frozen block table. A slip that moves the number into the block of another place of the same name changes one payload digit and is therefore always caught: 10-050-05101-8 (the code of Missira 101 in Bissau with one digit changed) is refused. A slip in the sector or place digits is refused whenever it lands on another place of the same name or on no place; it is accepted only when it lands on a place of a different name, whose word every screen then displays (Section 6.3).
4.13 Spot codes
Every point inside a sector has a spot code, computed offline from its coordinates on the sector’s grid of Eq. (12). Let and be the four-digit decimal forms of the cell coordinates and . Their digits are interleaved,
so that the first two digits name a square of 1,000 cells a side and every further pair refines it tenfold. An optional ninth digit selects one ninth of the cell, laid out as on a telephone keypad with 1 2 3 on the north row:
(19)
Worked example. Bandim 537 lies at , in Bissau’s grid, so , , and the spot code is 10-4327-9117; with , Eq. (19) gives and the refined code 10-4327-9117.7. Figure 6 shows the first level of the grid over Bissau. Spot codes are intended for places without a compound (a market stall, a meeting point at a weekly lumo, a fishing landing) and are shared as links rather than remembered.
4.14 Islands and the building profile
A compound on an island takes a place word only from the same island (Eq. (5)), and its card shows the island as a label; the code is unique without it.
Every structure carries a use class with its confidence and source, its footprint area, the number of floors where known, and a status; each compound aggregates them. The classes are specific to the country (compound house, annex, round house, shop, market, school, health post, mosque, church, barracks and others) and are inferred in a fixed order: OpenStreetMap tags (confidence 0.85–0.9), named places inside the footprint (0.65), the kind of enclosure (0.55), shape (round houses: circularity at least 0.9 and area at most 80 m²) and the settlement default. Of the 419,593 structures, 375,096 are compound houses and 37,222 annexes; 1,469 are round houses, 1,012 large buildings of unknown use, 375 industrial, 331 military, 308 offices and 236 schools. Floors are known for 82 structures only. A home never carries a name.
4.15 Worked examples
The table lists real codes from the registry: the compound nearest each of several well-known places.
| Near | Remembered and written | Machine | Sector |
|---|---|---|---|
| Mercado de Bandim, Bissau | Bandim 537 | 10-022-00537-4 | Bissau |
| Bissau Velho | Bissau Velho 345 | 10-033-00345-1 | Bissau |
| Gabú town | Gabu 1203 | 62-042-01203-8 | Gabú |
| Canchungo town | Canchungo 1381 | 55-091-01381-7 | Canchungo |
| Bubaque town | Bubaque 501 | 32-071-00501-0 | Bubaque |
| Missirá, Bissau | Missira 101 | 10-050-00101-8 | Bissau |
| Missirá, Sonaco | Missirá 5101 | 65-073-05101-5 | Sonaco |
Two scenarios illustrate use. A moto-taxi driver asks where to go; the passenger answers “Bandim, quinhentos e trinta e sete”; the driver types bandim 537, and the application shows the compound, its sector and its gate. Someone in Gabú types missirá 5101; the number lies in the block 5,000–5,499, which belongs to Missirá in Sonaco, so the application goes there directly, while missira 101 lies in 0–4,999, in Bissau. There is nothing to choose from a list and nothing to guess.
5 Implementation
Reference engine. engine/reference/gw_codes.py implements every function of Section 4 (sectors, places, name keys, plate names, block allocation, Hilbert numbering, insertion, the check digit and spot codes) in the Python standard library, together with unit tests. engine/SPEC.md is the normative specification, and engine/data/register.json carries what a decoder needs offline: sectors, every place with its plate name, aliases, name key and frozen blocks, and the sector and island outlines; engine/data/border.geojson holds the national border of Section 4.3.
Conformance vectors. engine/reference/vectors.json holds 425 name keys, 300 code forms, 660 resolutions of remembered forms, 256 spot codes and 6 numbering cases. Every implementation must reproduce them exactly. The N-Ways issuer numbered the first issue with its own implementation and refused the run unless every one of the 241,673 numbers agreed with the reference engine.
Registry. registry/ publishes every issued code: one gzip-compressed CSV file per sector with one row per compound (machine, remembered and written forms; area; official name; number; check digit; status; issue date; entrance point and kind; Plus Code; use class; structures; floor area; settlement class; postcode), the frozen area table areas.csv, and MANIFEST.json with the counts and the SHA-256 digest of every file. All 241,673 codes are published; none is withheld.
Server and API. server/ is a registry server in the Python standard library that any institution can deploy with one command (docker compose up). It imports the registry into SQLite after verifying every digest and count, serves a JSON API under /v1 (health, information, the full card of a code, search by any form, the code at a point, codes near a point, verification, spot encoding and decoding, sectors, places and paged listings), and exports the registry again byte for byte. A deployment is read-only unless the State or N-WAYS LIMITED designates it as the issuer. Only one issuer may exist per country, because two issuers working from the same block table would hand out the same number twice. The issuing endpoint applies the rules of Sections 4.5, 4.9 and 4.10 exactly; a parity test against the issuer’s own implementation agreed on every number, form, place and block. The API is documented in server/openapi.yaml and, with real requests and responses, in docs/api.md.
6 Evaluation
All measurements in this section are computed on the full published registry with the reference engine; the scripts are in the repository.
6.1 Uniqueness and coverage
Every compound in the country’s 39 sectors has exactly one code: 241,673 codes, 241,673 distinct machine forms, and no two codes with the same pair of name key and number. In the area table, each name’s blocks are disjoint and end at or below 99,999. Every entrance lies inside the national border or within 248 m of its simplified line, and none lies more than 300 m outside the unsimplified border (Section 4.3). All codes are provisional pending confirmation by residents (Section 12).
6.2 Decoding accuracy
We decoded every code of the registry in three ways. All 241,673 machine forms parse to their own place and number. All 241,673 remembered forms, resolved nationally by Eq. (16) without any context, return their own machine form. When the remembered forms are typed in lower case and without accents, as many phones produce them, all 241,673 resolve after the cedilla rule of Section 4.7. Before that rule, 681 codes (0.28 %) in seven places whose names contain ç (Praça, Sinchã Içaga, Serração and four others) failed in this test. The rule maps the cedilla-free spelling to the existing key, so no key, range or block changed.
6.3 Error detection
We drew 5,000 codes at random and applied every single-digit substitution and every exchange of adjacent digits to their machine forms, then parsed the results.
| Part of the machine form | Substitutions | Refused | Accepted as another name |
|---|---|---|---|
| Number (5 digits) | 225,000 | 100 % | 0 |
| Check digit | 45,000 | 100 % | 0 |
| Place index (3 digits) | 135,000 | 97.5 % | 2.5 % |
| Sector (2 digits) | 90,000 | 98.7 % | 1.3 % |
| Adjacent exchanges | |||
| Number | 13,041 | 100 % | 0 |
| Place index | 8,773 | 98.2 % | 1.8 % |
| Sector | 4,669 | 98.4 % | 1.6 % |
Every error in the number and the check digit is refused, as Damm’s construction guarantees. Errors in the sector or place digits are refused unless they happen to land on a valid number of a place with a different name, which the screen then names, so the error is visible.
People use the remembered form without the check digit, and for this form detection cannot be guaranteed. Over the same 5,000 codes, a single wrong digit in the spoken number produced, among the 121,981 results that were valid numbers, another issued compound of the same place in 59.4 % of cases, a compound of another place of the same name in 0.6 %, an unissued number (refused by the registry) in 34.5 %, and a number outside every block in 5.5 %. A slip within the same place is the common case, and the Hilbert ordering keeps it close: a wrong last digit lands at a median distance of 59 m from the intended compound, compared with 523 m for two compounds of the same place drawn at random. This is why the application displays the place and sector before it navigates, and why systems exchange the machine form.
6.4 Length of codes
Figure 7 shows the distribution of compounds per place, and Figure 8 the length of the issued numbers.
| Digits | Compounds | Share |
|---|---|---|
| 1 | 12,866 | 5.3 % |
| 2 | 71,904 | 29.8 % |
| 3 | 99,673 | 41.2 % |
| 4 | 54,233 | 22.4 % |
| 5 | 2,997 | 1.2 % |
The mean number has 2.85 digits, and 98.8 % of homes have four digits or fewer. Rural homes mostly have two or three digits, homes in towns three or four. In Bissau, 49 places hold a median of 710 compounds each; the largest, Bono, has 3,274 and its highest number at first issue is 6,547. Elsewhere the median place holds 30 compounds and the largest, Buba, 1,912. In the registry, the plate name of a code averages 7.3 characters; the remembered code, name and number, averages 11.1 characters. Twenty-eight places in use (all flagged for a council) still exceed the plate limit of Eq. (6).
6.5 Reserve and growth
The fill of each block at first issue, compounds divided by block size, is at most 0.25 by Eq. (9) and has a median of 0.17. No block needed a continuation at first issue.
6.6 Spot codes
For each of the 241,673 entrance points, we encoded the spot code and decoded it again. The distance between the point and the decoded centre had a median of 1.65 m, a 99th percentile of 4.97 m and a maximum of 6.61 m (in Gabú, where cells are 9.4 m). No point exceeded the bound of Eq. (20).
7 Designs considered and rejected
The final design is the last of several. Each change below was driven by a measurement.
| Option | Example | Reason for rejection |
|---|---|---|
| Alphanumeric grid code | 7C36VC23+VX4 | letters named in Portuguese, which most Kriol speakers do not use |
| National digits only | 00228 00537 | ten digits with nothing to anchor them in memory |
| Sector and number | Gabú 14738 | five digits in large sectors; sector names little used |
| Place and number, qualified by sector | Bandim 275, Catió | not unique on its own; fails when the code travels |
| Full official names | Sinchã Samba Camarà 12 | too long to say with a number |
| Plate name and number in a national range per name | Bandim 537 | adopted |
Qualifying repeated names by sector. An early design showed the sector next to a repeated word and listed the nearer place first. A code that depends on context fails precisely when it travels: read over the telephone, written on a parcel or typed far from the place. National ranges remove the dependency.
One range per place. Giving every place its own range would shorten numbers: the mean length would fall from 2.85 to 2.69 digits and no number would need five digits (Figure 8), but 92,745 homes in 1,039 places would share their spoken code with another home. We judged 0.16 digits on average a small price for unique codes.
Official names as place words. With official names, 335 names would be shared over 856 places; with plate names, 407 over 1,039, because short names coincide more often. Five-digit places rose from 21 to 25, all four new ones flagged for a council. The gain in brevity of the spoken word outweighs the longer numbers in a few places.
Too few places in Bissau. With only the 28 bairro points that OpenStreetMap held for Bissau, the city’s largest places would have reached 5,833 compounds and five-digit numbers (up to 11,665). Adding the former villages absorbed by the city brought every Bissau number of a confirmed place back to four digits or fewer.
Check characters. A check character that detects every single error and every adjacent exchange requires either eleven symbols with a prime modulus or a quasigroup such as Damm’s [27], [28]. Portuguese letter names rhyme in two large families (bê, cê, dê, gê, pê, quê, tê, vê, zê; efe, ele, eme, ene, erre, esse), so a letter would itself be a source of error. The machine form therefore carries a decimal digit; plates and people never see it.
Official areas excluded. A design that issued no code where official street numbers might exist would have left central Bissau without a usable address while its numbering remains uncertain. Every home now has a code, and an official address, where one exists, is shown first.
Deferring dense bairros. A design that waited for walls to be traced on imagery before numbering the densest Bissau bairros was replaced by issuing all compounds at once with the cautious town rule of Section 4.4: when residents report that two compounds are one home, one code becomes an alias and nothing is renumbered.
Order-dependent grouping. Two runs on the same data with rows in a different order gave 241,695 and 241,713 compounds. Sorting structures before grouping, and breaking ties along the Hilbert curve on the compound’s stable identifier, made the result deterministic, so that every implementation produces the same numbers.
8 Benefits for citizens
For a family in Bandim, in a morança of Nhacra or on Orango, a code changes four ordinary things.
Being found. A visitor, a moto-taxi or a delivery rider is guided today by telephone, landmark by landmark. With a code, the person says one short phrase and the application leads to the gate.
Proving where one lives. Banks, mobile-money agents, schools and employers ask for an address that can be verified. Before this registry, two of the country’s compounds had a door number in open data; every compound now has a code that can be said, written and checked against an open register.
Receiving goods and services. Relatives abroad, shops and utilities can send to a code instead of a description, and a household can request a connection or a repair at the right gate.
Simplicity. Nothing is asked of the household. Every compound already on the map received its code on 20 October 2026; the application shows it in one tap, in Portuguese, English or French. It is free, needs no document, stores no personal data and is not a land title.
Estimated reach. The number of people living in coded compounds is
9 Logistics and commerce
Delivery in Guinea-Bissau depends on the telephone and, to the islands, on boats. Industry sources estimate the cost of one last-mile delivery attempt in Africa at about US$2.70 and report first-attempt success rates as low as 60 % for most courier companies [29]; a routing vendor’s cost example for the Middle East and Africa assumes a failure rate of 5 % for a large operator [30]. Both are industry figures, not peer-reviewed measurements. We know of no measurement for Guinea-Bissau.
The code gives a logistics business a stable key for every customer, which can be stored, de-duplicated and joined to past deliveries; routing to the gate before the rider leaves; checked input, since the machine form refuses every single wrong digit at checkout rather than on the road; and open access, since the registry, engine and rules can be used in any system, offline, without payment. Bandim market, the regional lumos and the traders who buy cashew nuts, the country’s main export, can send goods and payments to a compound rather than to the nearest town. Boats to Bubaque, Bolama and the other islands can carry a code on every parcel.
Estimated saving. Let be the share of first attempts that fail with free-text addresses, the share with a code, and the cost of one attempt. The saving per thousand deliveries is
(21)
| Scenario | (US$) | per 1,000 deliveries (US$) | ||
|---|---|---|---|---|
| Low | 0.15 | 0.10 | 2.70 | 135 |
| Central | 0.25 | 0.07 | 2.70 | 486 |
| High | 0.40 | 0.05 | 2.70 | 945 |
The ranges are assumptions informed by the sources above, not measurements in Guinea-Bissau. The measurement programme of Section 13 is designed to replace them.
10 Emergency services
An ambulance, a fire crew or a police patrol faces the courier’s problem with more at stake. A continent-wide survey of emergency medical services identified systems in only 16 of Africa’s 54 countries, serving under 9 % of its population [31]. Where systems exist, locating the patient is a recognised source of delay: a qualitative study in Kigali found that crews and dispatchers relied on the caller’s local knowledge and needed several calls to establish the location [32]. We know of no published measurement for Guinea-Bissau.
A code helps a dispatcher in four steps. The caller says one phrase (“Missirá, cinco mil cento e um”); the registry returns one compound, in Sonaco, and not any of the thirteen other places called Missirá. The dispatcher reads back the place and sector. The crew is sent to the gate, and a spot code marks any point without a compound, such as a road accident. All of this works offline, because the engine and the registry files need no network.
Estimated effect. Larsen and colleagues modelled survival after out-of-hospital cardiac arrest as decreasing by 2.3 percentage points for each minute before cardiopulmonary resuscitation, 1.1 for each minute before defibrillation and 2.1 for each minute before advanced care [33]. Where one crew provides all three, a delay in finding the patient reduces survival by
| Minutes saved locating the patient, | 1 | 2 | 5 |
|---|---|---|---|
| Survival gained, (points) | 5.5 | 11 | 27.5 |
The model was fitted in King County, Washington, where survival rates and response times differ greatly from those of Guinea-Bissau, and it is linear only over the range of its data, so the figures indicate an order of magnitude rather than a prediction. The direction is not in doubt: where finding the gate takes minutes, removing the search matters as much as a faster vehicle.
11 Government coordination and planning
A code is a shared key. When ministries, the Câmara Municipal, utilities and INE refer to a compound by the same code, their records can be joined without matching names and descriptions. The World Bank’s review names this as a primary benefit of addressing for local government: an address directory lists premises more completely than the tax roll and shows who is missing from it [2].
The census. INE’s 2026 census georeferenced dwellings. A table of codes against enumeration areas would let each dataset serve the other: the census gives the registry household counts, and the registry gives survey teams a frame of 241,673 compounds with stable codes to sample from and return to, without storing any name.
Planning with counts. The registry counts compounds by region, sector, place, settlement class and building class, and every count can be recomputed from the open files. The planning law of 2026 calls for cartographic instruments [15]; the registry is one, open and available now.
Access to services. The table gives straight-line distances from compounds to the nearest mapped facility of each kind, on a random sample of 20,000 compounds and the map data of 20 October 2026.
| Facility | Within 2 km | Within 5 km | Median distance |
|---|---|---|---|
| Health facility | 20.8 % | 29.4 % | 16.1 km |
| School | 27.7 % | 36.7 % | 12.7 km |
| Police | 11.4 % | 22.8 % | 28.0 km |
| Pharmacy | 14.6 % | 28.5 % | 20.4 km |
These figures describe the map more than the country: few health posts, schools and police posts outside Bissau are mapped, so the distances are overstated. They show where mapping is most needed, and a ministry can substitute its own facility list and recompute them in minutes.
Cost avoided. Conventional addressing of the same compounds would cost about
where is the World Bank’s average cost per doorway in African cities at 2005 prices [2], before naming streets that do not exist and reaching the islands. With between half and twice that average, lies between US$0.7 million and US$2.8 million at 2005 prices. The codes were issued for every compound at once, at no cost to the State.
Growth. New compounds receive codes as they appear (Section 4.10), so the registry shows month by month where the country is growing and where roads, water, schools and health posts will be needed next.
12 Privacy, safety and governance
Privacy. Codes describe places, never people. Residential compounds carry no names and no occupant data, and household counts are never inferred. Business and public buildings carry their public names. Photographs taken in “Add my home” are kept for verification only. A household may ask for its door to be hidden: the compound keeps its code, and its gate is no longer shown. Partners see a code only with the customer’s consent. In the absence of a national data-protection law, the model applies the principles of the ECOWAS Supplementary Act [17], and stricter national rules will take precedence when they are adopted.
Safety. Military and police compounds keep their code and outline, both already visible on public maps, but no structure profile. A sacred house of traditional religion (baloba) is stored but not published without the community’s agreement. A code proves nothing about who owns or may use land; the application says so whenever a home is added.
Confirmation. Every code starts provisional. It becomes confirmed when residents agree in the application that it is right (two telephones, at least one at the gate, with most answers in agreement), and corrections to the gate follow the same consensus. No code is reviewed by hand.
Governance. One issuer per country guarantees that no two homes share a code. Sectors, issued codes, name keys and each name’s blocks never change; adding blocks is not a change. Building profiles change with evidence. The Câmara Municipal or a sector administration, with the régulos and the community, may rename a place (the old name becomes an alias and no number changes), choose a provisional plate name once, or add places, which receive new blocks. If the State publishes an address system, its addresses are shown first and the codes become cross-references. The repository, the registry and the rules can be transferred to the State or a body it designates, INE, the Câmara Municipal de Bissau or Correios, under the open licences and without forking the engine.
13 Limitations and future work
- Places. OpenStreetMap and GeoNames cover the country unevenly, and the Câmara Municipal’s bairro list is needed in Bissau.
- Plate names. 356 plate names are provisional until councils choose; 28 still have no form within the limit.
- Compounds. Grouping is inferred. In walled town plots the rules recover only 13 % of compounds whole; residents’ corrections fix them over time.
- Gates. Only 12 gates are mapped, so the registry’s entrance points are compound centres until couriers and residents confirm the gates.
- Heights. Heights are unknown for nearly every building, so floor areas are estimates.
- Facilities. Facilities are thinly mapped, so the access figures of Section 11 understate access.
- Spoken slips. Without the check digit, a single wrong digit usually names another real compound (Section 6.3); only display of the decoded place mitigates this.
- Borders. Codes are unique within Guinea-Bissau. A place name shared with Senegal or Guinea (Madina, Missirá) may yield the same spoken code there; the application shows the country on every card.
The measurement programme below will replace the estimates of Sections 8 to 11 with field data. It is to be carried out in three Bissau bairros (Bandim, Bairro Militar, Cuntum) and one tabanca cluster in Biombo or Oio.
| Measure | Method | Target |
|---|---|---|
| Recall of one’s own code after four weeks | residents asked in Kriol, without the application | at least 80 % exact |
| First-attempt delivery success | partner couriers, with and without a code | at least 20 points higher with a code |
| Time from arrival in the bairro to the gate | courier timestamps | halved |
| Gates confirmed | residents and couriers | 10,000 |
| Time to locate emergency calls | with a willing ambulance or fire service | measured, then halved |
| Recall by form | code, digits-only form and grid code for the same home | measured per form |
Further work includes the comparison of compounds with the census’s georeferenced dwellings, should INE agree; a wall and gate tracing pass on imagery for the evaluation bairros; and a review by native speakers of the Kriol readings and of the folding rules of Eq. (8), which may only merge keys by alias, never split a range.
14 Conclusion
Guinea-Bissau’s homes can be addressed without naming streets or numbering doors, by building on what people already say: the name of their bairro or tabanca, followed by a number. Making that code unique required a national number range per name, divided into frozen blocks; making it robust required a check digit in the machine form and a numbering that keeps neighbours close; making it durable required rules that never renumber an issued code. On the full registry of 241,673 codes, the model is unique, short (2.85 digits on average) and decodable without context, and it refuses every single-digit error in the number of its machine form. Its benefits for citizens, couriers, emergency services and government depend on use, which the field programme will measure. The model, its engine, its registry and its server are open, and they are designed to be handed to the State.
Data and code availability
The engine, specification, registry, server and this paper are published at https://github.com/n-ways/open-addresses-guinea-bissau [34]. Code is licensed under the Apache License 2.0, data under the Open Database License 1.0 and documents under CC BY 4.0. Every use must credit: “N-Ways Addressing for Guinea-Bissau, © N-WAYS LIMITED (nways.ng)”. The figures are drawn from data computed by tools/paper_figures.py from the published registry.
Acknowledgements
We thank the OpenStreetMap contributors who mapped Guinea-Bissau’s buildings, moranças and islands; Google Research and Microsoft for publishing their building footprints, and the Overture Maps Foundation for distributing them; GeoNames for its gazetteer; and the Universal Postal Union for its addressing documentation. Census figures are those published by the Instituto Nacional de Estatística.