entities.ca

The identifier

CA-E-4T7K-9BQ2
A kind letter, seven data characters, one check character. Minted once, never reassigned, and never computed from anything that can change.

Jurisdiction is not in the key

A corporation can be continued from Alberta into the federal statute, amalgamated into an Ontario company, and registered extra-provincially in five more places. An identifier with AB baked into it starts lying the moment the entity moves.

The same argument rules out names, addresses and registry numbers. Jurisdiction is a rendered attribute of a record, not part of its identity.

Minted, not derived

A hash of the name changes when the name changes. A hash of the corporation number collides across registries that reuse numbers. So nothing computes a CEID from content: assignment is a fact, recorded in an append-only ledger that no rebuild path touches.

That ledger is the one piece of state in the system that cannot be reconstructed. Every other artefact — the raw captures, the normalised observations, the records, the indexes, this page — can be deleted and regenerated by re-reading the publishers. An identifier cannot: once it has appeared on a public page or in somebody’s spreadsheet, it has to keep meaning the same organisation forever.

The check character

Identifiers get read aloud, retyped and pasted. A mistyped one must fail, not quietly resolve to a different company.

The obvious construction — ISO 7064 MOD 33,32 — has a hole. It does not catch the transposition of the final data character with the check character: PGBA4X01 and PGBA4X10 both verify. That is precisely the typo a human makes.

So the scheme here is a weighted sum with weights 2,3,4,5,6,7,8,1 modulo 37. Thirty-seven is prime and larger than the 32-character alphabet, which makes every single-character substitution and every adjacent transposition detectable — including that last pair. The property is proved by exhaustive test, not by argument.

It costs something: five of the thirty-seven residues have no character in the alphabet, so about 13.5% of candidate identifiers are rejected at mint time and re-drawn. That is a good trade for a public identifier.

The alphabet

Crockford Base32: the digits and the letters, minus I, L, O and U. I and L are dropped because they read as 1, O because it reads as 0, and U so that a random draw is less likely to spell something. Typed input folds the confusable characters back, so a human who types the letter O where the identifier has a zero still lands on the right record.

Draws that spell something offensive are rejected and re-drawn, including in leetspeak reading. A public identifier is cheap to check at mint time and impossible to fix afterwards.

Kinds
LetterMeaning
EEntity — an organisation
LLocation — an address cluster
GGroup — a corporate family

Unlike jurisdiction, the kind letter belongs in the key: kinds are disjoint and permanent. An entity never becomes a location.

How records are assembled · Look up an identifier