ng-postcode
Rust library for Nigeria's National Digital Alphanumeric Postcode System (NDAPS), the building-level postcode NIPOST launched in October 2026. Parse, validate and format postcodes offline, and call the postcode.gov.ng API for lookup, autocomplete and reverse geocoding.
Part of the ng-postcode project, which has the same behaviour in Python, JavaScript and Java, MCP servers for AI assistants, and an address resolver.
Format
An 11-character code in five segments: state, LGA, district, area, building unit.
| Form | Example | Use it to |
|---|---|---|
| Canonical | EK-01-A03-FK-01 |
Write a code and pass it between systems |
| Spaced | EK 01 A03 FK 01 |
Show a code to people |
| Compact | EK01A03FK01 |
Store and compare codes |
Compact form as a regular expression: ^[A-Z]{2}(0[1-9]|[1-9][0-9])[A-Z0-9]{3}[A-Z]{2}(0[1-9]|[1-9][0-9])$
Offline
use ;
Postcode::parsechecks the structure: 2 letters, 2 digits, 3 letters or digits, 2 letters, 2 digits, with numeric segments from 01 to 99.Postcode::parse_lenientfirst swaps look-alike characters that cannot occur where they stand (O/0,I/1,S/5,B/8) and reports how many it changed.Postcode::from_segmentsassembles a code from its parts and zero-fills the LGA and unit.Prefix::parsereads a code cut off after a segment, such as the districtEK-01-A03, andPostcode::truncatecuts a code down to one. A prefix knows which codes it contains, so it groups them by state, LGA, district, or area.PostcodeisCopy, 11 bytes, and sorts by state, LGA, district, area, unit.
A well-formed code is not necessarily assigned to a building, and the state is not checked against a list of state codes. Only the API can confirm that a postcode exists.
API
use ;
api covers lookup, autocomplete, reverse geocoding and nearby search. Each function returns a Request value, or InvalidRequest for one the API cannot answer, such as an empty autocomplete or a coordinate that is not finite, and Request::decode turns a status and body into a typed result, so the api feature alone works with any HTTP client, sync or async. The client feature adds a small blocking one, built on ureq. If your program installs a log logger at trace level, ureq writes each request's bytes to it, the key among them.
Features
| Feature | Adds |
|---|---|
serde |
Serialize and Deserialize for Postcode |
api |
Request and response types, no I/O |
client |
Blocking HTTP client |
License
MIT