Address codes
The full grammar lives in the ADAS Address Specification; this page covers what integrators need.
Anatomy
Canonical form: two ISO country letters + 9 or 10 digits, no separators.
| Kind | Digits | Structure | Display |
|---|---|---|---|
| standard | 9 | ZZZZ UUUU C | UG-4715-82038 |
| extended | 10 | ZZZZ UUUUU C | NG-4715-820367 |
| legacy | 8 | pre-2026 codes | UG-1234-5678 |
- Zone (4 digits) — geographic. Nearby zones have nearby numbers.
- Unit — random within the zone; carries no meaning.
- Check digit — Damm algorithm over the digits. Detects 100% of single-digit errors and adjacent transpositions — the two most common human mistakes.
- Extended format serves the four highest-population countries (NG, ET, EG,
CD); everything else is standard.
GET /v1/countriestells you which.
Normalize, then validate — client-side
Codes arrive messy: zm 2992 24388, ZM-2992-24388, zm299224388. Strip
all non-alphanumerics, uppercase, then verify the check digit before any
network call. Your form can reject a typo while the user is still looking
at it.
Reference implementations (Python, TypeScript, Dart) with a shared
conformance test-vector file live in the
platform repository under
packages/.
Display rules
Always exactly two hyphens: country, zone block, rest. Never visually separate the check digit — users must perceive it as part of the code, not an optional suffix.
Legacy codes and aliases
8-digit codes from the pre-2026 ADAS systems resolve through the registry's
alias layer — same endpoints, kind: legacy, no offline validation
(they carry no check digit). The alias layer is also how identifiers from
national addressing systems map onto ADAS canonical codes.