Skip to main content

The identifier catalog

Use it when you need a technical identifier that has to look real and pass a format check — a UUID, an email, an IBAN, a payment-card number, a checksummed tax or document number — without inventing it by hand or copying a real one. Every path on this page is a value for type="template"; the value attribute is a dotted path that picks which identifier you get.

This page is the full lookup. For a guided tour of the same generator — person data, dates, localization — see the template generator. For the person, name, and date families specifically, that page is the better starting point; this one is the exhaustive catalog of technical identifiers.

Outputs are illustrative

Every value below comes from a fixed seed, so it's reproducible, but the exact string can change between core versions. Read them as examples of shape, not as guarantees.

How to call​

Two naming rules split the catalog:

  • Global identifiers carry a common. prefix — common.id.uuid, common.finance.iban, common.payment.card.pan, common.phone.e164.
  • Country-specific ones start with the country name — usa.docs.ssn, usa.tax.ein, brazil.tax.cpf, poland.docs.pesel.
<gen type="template" value="common.id.uuid"/>
<gen type="template" value="usa.docs.ssn"/>

An unknown path is a hard error, never a silent blank:

./run bad.tdc
error[TDC071]: unknown template path "usa.docs.nope"
--> bad.tdc:2:48
|
2 | <gen type="template" value="usa.docs.nope"/>
|                             ^^^^^^^^^^^^^

Why these pass validation​

Most "number-like" identifiers carry a check digit computed from the rest of the number (Luhn, mod-11, ISO 7064, GS1 mod-10, …). Ten random digits fail the very first format check, so a test built on them is worthless. These templates emit values that pass their checksum yet are deliberately not real — reserved test ranges, fictional prefixes, IANA-reserved TLDs — so they're safe to drop into demos, fixtures, and CI. How each check digit is defined is covered below.

Parameters​

Many identifiers accept parameters — pass them as ordinary attributes on <gen>. Any parameter you leave out is drawn at random; the ones you set are pinned across every row, and the check digit is recomputed each time so the value stays valid.

A parameter name can never be one the engine itself reads off the <gen> — local, order, case, mask and the other wrappers. A pack that declares one is refused when it loads, because the parameter would look real and be unsettable. That is why the email generator's local part is user= and not local=: local= is the locale override.

A pinned value has to be the same width the identifier's own part is. These are fixed layouts — a check digit is computed over the whole of the value — so a wider or narrower part does not shift the layout, it breaks it. usa.finance.aba_routing used to accept prefix="12345" and then abort mid-run, and tail="678" and then write a six-digit number that is not a routing number. Both are TDC276 now, before a single row is made.

For example, pin the area part of every US Social Security number:

<gen type="template" value="usa.docs.ssn" area="555"/>
./run ssn.tdc
555772009
555599501
555844442
555579578
555258469

Every value starts with 555, and each one is still a well-formed SSN. Use a parameter when part of the identifier has to stay constant — a fixed issuer, a fixed tax office, a fixed domain — while the rest varies.

Discovering a path's parameters​

A parameter is just a local <sequence name="…"> inside the data pack behind the path, and the caller overrides it with a constant. So the parameters a path accepts are exactly the local sequence names in its pack. Getting one wrong is a clear error (TDC072), never a silent no-op:

./run bad-param.tdc
error[TDC072]: "bogus" is not a parameter of "usa.docs.ssn" — it would be ignored
--> bad-param.tdc:2:47
|
2 | <gen type="template" value="usa.docs.ssn" bogus="1"/>
|                                           ^^^^^

A few representative paths and the parameters they expose:

PathParameters
common.internet.emailuser, domain
common.internet.urlscheme, domain, slug
common.internet.domainword, token, suffix
common.finance.ibanbban
common.payment.card.panbase
usa.docs.ssnarea, group, serial
usa.tax.einprefix, serial
usa.tax.itinmid, group, serial
usa.finance.aba_routingprefix, tail
usa.phonearea, line
germany.docs.lanrdoctor, specialty
Simplified variants

When these generators moved into editable packs, a few rarely used parameters and "formatted" variants (the ones with brackets or dashes) were reduced to the plain form. The checksums and the core format are unchanged; only the cosmetic wrapping is gone.

IDs and internet​

Opaque IDs (UUID, ULID, Nano ID, ObjectId), commit hashes, and safe web values. Use them when a record needs a primary key, a fake email, or a placeholder URL that can't collide with a real one.

<gen type="template" value="common.id.uuid"/>
<gen type="template" value="common.id.ulid"/>
<gen type="template" value="common.id.nanoid"/>
<gen type="template" value="common.git.sha"/>
./run ids.tdc
common.id.uuid        63af26a7-9997-4aa8-8883-bec8f2a5c541
common.id.ulid        5GQ9BM9G731XA1KW1KMYM9EGAK
common.id.nanoid      LKCYPokQsGREjVYrZvJjz
common.id.object_id   3ed9c528008a4cc46dbb53b2
common.git.sha        efffc5bd4c321932277f4ff77cc01993344ecd2e
common.system.semver  8.13.7

Emails and domains use IANA-reserved TLDs (.test, .invalid, .example), and the IPs sit in private or documentation ranges, so nothing here can reach a real address:

./run internet.tdc
common.internet.email     qjoasyc4yx@sandbox-8s2332.test
common.internet.domain    test-26vh9o.test
common.internet.url       https://fixture-vaqpcg.example/atlas-sandbox-sandbox
common.internet.ipv4      10.251.85.160
common.internet.ipv6      2001:db8:c43:28eb:f2c:ee5:e:8d5
common.internet.mac       c5:62:b8:e2:af:d3
common.internet.username  lfmln1e_b
PathProducesExample
common.git.shaGit commit SHA-1 (40 lowercase hex chars)efffc5bd4c321932277f4ff77cc01993344ecd2e
common.id.nanoidNano ID (21 chars, URL-safe alphabet A–Za–z0–9_-)LKCYPokQsGREjVYrZvJjz
common.id.object_idMongoDB ObjectId (24 lowercase hex chars)3ed9c528008a4cc46dbb53b2
common.id.ulidULID (26 chars, Crockford base32; first char 0–7)5GQ9BM9G731XA1KW1KMYM9EGAK
common.id.uuidUUID v4 (RFC 4122 — version 4, variant 8/9/a/b)63af26a7-9997-4aa8-8883-bec8f2a5c541
common.internet.domainSafe fake domain — token.suffix (RFC 2606 reserved TLDs)test-26vh9o.test
common.internet.emailSafe email — a 10-char local part at a safe fake domainqjoasyc4yx@sandbox-8s2332.test
common.internet.ipv4IPv4 in the private ranges (10/8, 172.16/12, 192.168/16)10.251.85.160
common.internet.ipv6IPv6 in the 2001:db8::/32 documentation range2001:db8:c43:28eb:f2c:ee5:e:8d5
common.internet.macMAC address — six colon-separated lowercase hex octetsc5:62:b8:e2:af:d3
common.internet.slugURL slug — 2 to 4 lowercase words joined by hyphenstest-atlas-sandbox
common.internet.urlSafe URL — scheme://safe-domain/slug (the scheme defaults to https)https://fixture-vaqpcg.example/atlas-sandbox-sandbox
common.internet.usernameUsername — a leading letter, then 7–13 chars of a–z0–9_lfmln1e_b
common.system.semverSemantic version — major 0–9, minor 0–19, patch 0–998.13.7

Finance and payments​

IBANs, SWIFT/BIC codes, payment-card PANs, and the US ABA routing number — each with a real check built in. Use them when a fixture has to survive a bank-format check or a Luhn validator.

<gen type="template" value="common.finance.iban"/>
<gen type="template" value="common.finance.bic"/>
<gen type="template" value="common.payment.card.pan"/>
<gen type="template" value="usa.finance.aba_routing"/>
./run finance.tdc
common.finance.iban       DE60077427668812994595
common.finance.bic        VROLFR00F1Y
common.payment.card.pan   4111111726740445
usa.finance.aba_routing   649946910

The IBAN carries a valid ISO 7064 mod-97 check, the PAN carries a valid Luhn check in the Visa test range (4111…), and the routing number carries a valid mod-10 [3,7,1] check.

PathProducesExample
common.finance.bicSWIFT/BIC-11 (4 letters + country + 2 location + 3 branch)VROLFR00F1Y
common.finance.ibanIBAN (country defaults to DE, 18-digit BBAN, ISO 7064 mod-97 check)DE60077427668812994595
common.payment.card.panPayment-card PAN (Visa test range, 16 digits + Luhn check)4111111726740445
usa.finance.aba_routingUS ABA routing number (8 digits + mod-10 [3,7,1] check)649946910

Products and devices​

Retail and hardware barcodes and identifiers — ISBN, EAN, UPC, GTIN, IMEI, ICCID, ISSN. Use them when a catalog or inventory fixture has to pass a scanner or a format check.

<gen type="template" value="common.book.isbn13"/>
<gen type="template" value="common.product.ean13"/>
<gen type="template" value="common.device.imei"/>
./run products.tdc
common.book.isbn13     9783635567452
common.product.ean13   9418766812071
common.product.upc_a   277703531852
common.product.gtin14  69243931643417
common.device.imei     263236381039942
common.device.iccid    8910106572426433879
common.periodical.issn 23614552
common.vehicle.vin     XJV8TB3B7W5726830
PathProducesExample
common.book.isbn10ISBN-10 (9 digits + mod-11 check, 10 → X)1684319684
common.book.isbn13ISBN-13 (978/979 prefix + 9 digits + GS1 mod-10 check)9783635567452
common.periodical.issnISSN (7-digit base + mod-11 check, weights 8..2, 10 → X)23614552
common.product.ean13EAN-13 (12-digit base + GS1 mod-10 check)9418766812071
common.product.gtin14GTIN-14 (13-digit base + GS1 mod-10 check)69243931643417
common.product.upc_aUPC-A (11-digit base + GS1 mod-10 check)277703531852
common.device.iccidICCID (89 + country + issuer prefix, 19 digits + Luhn check)8910106572426433879
common.device.imeiIMEI (14-digit base + Luhn check digit, 15 digits in all)263236381039942

Security and hashes​

API keys, one-time codes, TOTP secrets, JWTs, and raw digests. Use them when you need a credential-shaped placeholder for an auth flow or a log line — never a real secret.

<gen type="template" value="common.security.api_key"/>
<gen type="template" value="common.security.otp"/>
<gen type="template" value="common.security.sha256"/>
./run security.tdc
common.security.api_key      tdc_cxmmn0eD60xEB5CLOilveNjDyxBcYaaM
common.security.otp          874846
common.security.md5          db3d24933e41cbafde844af6dddc769f
common.security.sha1         313f20b6a4fb5eedc53cf02ae32e56c2b7ee0d7b
common.security.sha256       f1be92ba089ddaa35e2273dd6c7d66d712c85e313316a2f006786f383e9f686e
common.security.totp_secret  76F7GJ5PYJXYHYY7E5DMY2L6G6XGVSAL
PathProducesExample
common.security.api_keyAPI key (tdc_ prefix by default + 32 alphanumerics)tdc_cxmmn0eD60xEB5CLOilveNjDyxBcYaaM
common.security.jwtFake JWT (fixed base64url header per alg + random payload and signature)eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.6LKo…
common.security.md5MD5 digest (32 lowercase hex chars)db3d24933e41cbafde844af6dddc769f
common.security.otpNumeric one-time passcode (6 digits by default)874846
common.security.sha1SHA-1 digest (40 lowercase hex chars)313f20b6a4fb5eedc53cf02ae32e56c2b7ee0d7b
common.security.sha256SHA-256 digest (64 lowercase hex chars)f1be92ba089ddaa35e2273dd6c7d66d712c85e313316a2f006786f383e9f686e
common.security.totp_secretTOTP shared secret (32 base32 chars by default, RFC 4648 A–Z2–7)76F7GJ5PYJXYHYY7E5DMY2L6G6XGVSAL

Documents, transport, logistics​

Machine-readable travel documents (ICAO 9303 MRZ), vehicle VINs, and ISO 6346 shipping containers. Use them when a fixture gets scanned or OCR'd and has to satisfy the format's composite check digits.

The two MRZ paths are multi-line — a TD1 identity card is three 30-char lines and a TD3 passport is two 44-char lines, each carrying ICAO composite check digits:

./run mrz.tdc
common.docs.mrz.id_td1 (identity card, three 30-char lines):
I<UTOV80Y7XXNC58C1E31V2B6IGCXD
8402079F3111275UTOFP4DCM7IPY95
MILLER<<ADAM<<<<<<<<<<<<<<<<<<

common.docs.mrz.passport_td3 (passport, two 44-char lines):
P<UTODOE<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
22VVYEM7V0UTO9403280<3703276L73REEFL4AFXU642

The single-line codes:

./run transport.tdc
common.vehicle.vin                  XJV8TB3B7W5726830
common.logistics.container_iso6346  PQXU6242844
PathProducesExample
common.docs.mrz.id_td1ICAO 9303 TD1 identity-card MRZ (three 30-char lines) with composite check digits(see above)
common.docs.mrz.passport_td3ICAO 9303 TD3 passport MRZ (two 44-char lines) with composite check digits(see above)
common.logistics.container_iso6346ISO 6346 container code (owner + category + 6-digit serial + mod-11 check)PQXU6242844
common.vehicle.vinVehicle identification number (ISO 3779, 17 chars, weighted mod-11 check; 10 → X)XJV8TB3B7W5726830

Phone numbers​

common.phone.e164 picks a random country, and each country also has its own path. They all emit E.164 format. Where a country reserves a range for drama and testing, the pack uses it. The US and Canada take a real area code in service — every one of them, from the NANPA database, kept in usa.phoneAreaCode and canada.phoneAreaCode — followed by 555-0100 to 555-0199, the line numbers reserved for fiction; the UK uses Ofcom's 07700 900xxx. Most countries reserve no such range, so those paths build a structurally valid number out of real prefixes instead: safe to store and to parse, but not a number anyone can dial. Use them when a contact fixture has to parse as a valid international number.

<gen type="template" value="usa.phone"/>
<gen type="template" value="common.phone.e164"/>
./run phones.tdc
usa.phone             +12605550194
canada.phone          +17785550122
united_kingdom.phone  +447700900211
germany.phone         +4916217255164
france.phone          +33647516563
common.phone.e164     +5491126272479
PathProducesExample
argentina.phoneArgentina mobile, E.164 (+54 9 11…)+5491185268868
brazil.phoneBrazil mobile, E.164 (+55 + DDD + 9…)+5562940038023
canada.phoneCanada, E.164 (real area code, 555-01XX fiction)+17785550122
common.phone.e164E.164 phone, with a random country from the set+5491126272479
france.phoneFrance mobile, E.164 (+33 6…)+33647516563
germany.phoneGermany mobile, E.164 (+49 15x/16x/17x…)+4916217255164
mexico.phoneMexico, E.164 (+52 + LADA, 10-digit national number)+527353382246
poland.phonePoland mobile, E.164 (+48 5…)+48587209191
russia.phoneRussia mobile, E.164 (+7 9…)+79962527739
spain.phoneSpain mobile, E.164 (+34 6…)+34631634932
united_kingdom.phoneUK mobile, E.164 (Ofcom drama range +44 7700 900xxx)+447700900211
usa.phoneUS, E.164 (real area code, 555-01XX fiction)+12605550194

National tax and document numbers​

Every country listed here has its own family of checksummed tax, identity, and — for a few of them — bank numbers. The US set alone covers most common needs:

<gen type="template" value="usa.docs.ssn"/>
<gen type="template" value="usa.tax.ein"/>
<gen type="template" value="usa.tax.itin"/>
./run us-ids.tdc
usa.docs.ssn             003060008
usa.tax.ein              678895040
usa.tax.itin             975531718
usa.finance.aba_routing  649946910

Health systems number their doctors, hospitals and patients the same way, and those numbers carry check digits too — the US NPI that every provider bills under, Germany's lifelong doctor number and the insurance number on the health card, France's RPPS and FINESS, Brazil's SUS card:

<gen type="template" value="usa.docs.npi"/>
<gen type="template" value="germany.docs.lanr" specialty="28"/>
./run health.tdc
usa.docs.npi        1185286543
germany.docs.kvnr   C002080564
germany.docs.lanr   176240528
france.docs.rpps    10579255182
france.docs.finess  060053394
brazil.docs.cns     215078168060009

Use these when a record has to carry a country-appropriate identifier that survives that country's validator — a Brazilian CPF, a Polish PESEL, a German VAT number — while staying provably fake. Here's the full list, by address:

PathProducesExample
argentina.docs.dniArgentine DNI (8-digit national identity number, no check digit)43073935
argentina.tax.cuilArgentine CUIL (2-digit prefix + 8-digit body + weighted mod-11 check)27740275106
argentina.tax.cuitArgentine CUIT (2-digit prefix + 8-digit body + weighted mod-11 check)24574791010
austria.tax.vatAustrian VAT / UID (ATU + 7 digits + Luhn-style check digit)ATU55031548
belgium.tax.vatBelgian VAT (BE + 8-digit base + mod-97 check)BE0507916645
bolivia.docs.ciBolivian Cedula de Identidad (7-digit number, no check digit)3991646
bolivia.tax.nitBolivian NIT (9-digit tax number, no check digit)252014061
brazil.docs.cnsBrazilian health card CNS (valid PIS + 000/001 + Ministry of Health mod-11 digit)215078168060009
brazil.tax.cnpjBrazilian CNPJ (8-digit root + 4-digit branch + two mod-11 check digits)25232116564552
brazil.tax.cpfBrazilian CPF (9-digit base + two mod-11 check digits)14806904651
bulgaria.tax.vatBulgarian VAT (BG + 9 or 10 digits, no checksum)BG380883064
canada.docs.sinCanadian SIN (8 digits + Luhn check)585996796
canada.tax.bnCanadian Business Number (9 digits, no checksum)307343577
canada.tax.program_accountCanadian program account (BN + program code + 4-digit reference)921050900RP9000
chile.docs.runChilean RUN (7–8 digit body + cyclic weighted mod-11 check, 10 → K)271951701
chile.tax.rutChilean RUT (7–8 digit body + cyclic weighted mod-11 check, 10 → K)90529471
colombia.docs.ccColombian Cedula de Ciudadania (8–10 digit number, no check digit)74407968
colombia.tax.nitColombian NIT (9-digit body + prime-weighted mod-11 check, right-to-left)4444807433
costa_rica.docs.cpfCosta Rican fisica ID (10 digits starting with 0, no check digit)0813694243
costa_rica.tax.cpjCosta Rican juridica ID (class digit + type + 6-digit serial, no check digit)4000813072
croatia.tax.vatCroatian VAT / OIB (HR + 10-digit base + ISO 7064 MOD 11,10 check)HR99570241890
cyprus.tax.vatCypriot VAT (CY + 8 digits + 1 uppercase letter)CY65642357G
czechia.tax.vatCzech VAT / DIC (CZ + 8, 9 or 10 digits, no checksum)CZ288311951
denmark.tax.vatDanish VAT / CVR (DK + 8 digits, no checksum)DK42005491
dominican_republic.docs.cedulaDominican Cedula (10-digit body + Luhn check digit)96179414394
dominican_republic.tax.rncDominican RNC (8-digit body + weighted mod-11 check)970897251
ecuador.docs.ciEcuadorian Cedula (province + 9-digit payload + mod-10 check)2144971195
ecuador.tax.rucEcuadorian RUC, private-company form (province + 9 + weighted mod-11 check + 001)0294486720001
el_salvador.docs.duiEl Salvador DUI (8-digit body + weighted mod-10 check digit)332432757
el_salvador.tax.nitEl Salvador NIT (8-digit body + weighted mod-10 check digit)492719607
estonia.tax.vatEstonian VAT / KMKR (EE + 9 digits, no checksum)EE949727018
europe.tax.vatEU VAT (delegates to a default member state — Germany)DE193530291
finland.tax.vatFinnish VAT / ALV (FI + 7-digit base + weighted mod-11 check)FI76372425
france.docs.finessFrench health establishment FINESS (département + 0 + 5 digits + Luhn check)060053394
france.docs.rppsFrench health professional RPPS (10 + 8 digits + Luhn check)10579255182
france.tax.sirenFrench SIREN (8 digits + Luhn check)033948829
france.tax.vatFrench VAT (FR + mod-97 key + valid Luhn SIREN)FR82250352820
germany.docs.kvnrGerman health insurance number KVNR (letter + 8 digits + weighted mod-10 check)C002080564
germany.docs.lanrGerman doctor number LANR (6 digits + 4/9 mod-10 check + specialty group 01–69)176240528
germany.tax.vatGerman VAT / USt-IdNr (DE + 8 digits, iterative mod-11/10 check)DE641787309
greece.tax.vatGreek VAT / AFM (EL + 8-digit base + weighted mod-11 then mod-10 check)EL413288496
guatemala.docs.cuiGuatemala CUI (9-digit serial + department 01–22 + municipality 01–99, no check digit)2642014611803
guatemala.tax.nitGuatemala NIT (13-digit body, the same shape as the CUI, no check digit)4436278540509
honduras.docs.idHonduras national ID (department + municipality + year + 5-digit serial, no check digit)1801200568981
honduras.tax.rtnHonduras RTN (the 13-digit Honduras ID shape + 1 trailing digit, no check digit)09281955957643
hungary.tax.vatHungarian VAT / ANUM (HU + 7-digit base + weighted mod-10 check)HU27025501
ireland.tax.vatIrish VAT (IE + 7 digits + 1 uppercase letter)IE8448267L
italy.tax.vatItalian VAT / Partita IVA (IT + 10 digits + Luhn check)IT12124511358
latvia.tax.vatLatvian VAT / PVN (LV + 11 digits, no checksum)LV51009639397
lithuania.tax.vatLithuanian VAT / PVM (LT + 9 or 12 digits, no checksum)LT117600379
luxembourg.tax.vatLuxembourg VAT / TVA (LU + 8 digits, no checksum)LU96561821
malta.tax.vatMaltese VAT (MT + 8 digits, no checksum)MT07558770
mexico.tax.rfcMexico RFC (person 4-letter or org 3-letter + YYMMDD + 2 homoclave chars + mod-11 check char)TLT870426K69
mexico.tax.rfc_orgMexico RFC for an organization (3 letters + YYMMDD + 2 homoclave chars + mod-11 check char)ESV970818ZA1
mexico.tax.rfc_personMexico RFC for a person (4 letters + YYMMDD + 2 homoclave chars + mod-11 check char)QEHF820406TE1
netherlands.tax.vatDutch VAT / BTW (NL + 9 digits + B + 2-digit branch 01–99, no checksum)NL430439452B03
nicaragua.docs.cedulaNicaragua cedula (municipality + DDMMYY + 4-digit serial + control letter, no check digit)0051201752201B
nicaragua.tax.rucNicaragua RUC (person form — the same shape as the cedula, no check digit)0041010962608F
panama.docs.cedulaPanama cedula, citizen form (province 1–13 + two 1–9999 groups, no check digit)13187
panama.tax.rucPanama RUC, natural-person form — the same shape as the citizen cedula1221339
paraguay.docs.ciParaguay Cedula de Identidad (7-digit number, no check digit)3254657
paraguay.tax.rucParaguay RUC (person 7-digit or org 8-digit body + cycling-weight mod-11 check)919747108
peru.docs.dniPeru DNI (8-digit national identity number, no check digit)00124682
peru.tax.rucPeru RUC (2-digit prefix + 8-digit body + weighted mod-11 check digit)15278344671
poland.docs.peselPolish PESEL (century-encoded date + serial + sex digit + weighted mod-10 check)87212812168
poland.tax.nipPolish NIP (9 digits + weighted mod-11 check; rejects check==10)6047995975
poland.tax.vatPolish VAT (PL + NIP)PL8126284465
portugal.tax.vatPortuguese VAT / NIF (PT + 8-digit base + weighted mod-11 check)PT909207518
romania.tax.vatRomanian VAT / CIF (RO + 2 to 10 digits, no checksum)RO98311815
russia.bank.accountRussian 20-digit bank account with cross-field mod-10 control key over the BIK tail40702810299206214921
russia.bank.bikRussian BIK (9 digits: 04 + region + RKC + participant; no checksum)047225281
russia.bank.correspondent_accountRussian correspondent account (20 digits, embeds the BIK tail, cross-field mod-10 key)30101810080720184177
russia.docs.snilsRussian SNILS (9 digits + mod-101 two-digit check)21804781661
russia.geo.postalRussian postal code (6 digits, real range 101000–692999)326151
russia.tax.inn_orgRussian INN for a legal entity (10 digits, weighted mod-11 check)6840437608
russia.tax.inn_personRussian INN for a person (12 digits, two weighted mod-11 checks)860084325267
russia.tax.kppRussian KPP (9 digits: tax office + reason + serial; no checksum)976244677
russia.tax.ogrnRussian OGRN for a legal entity (13 digits, whole-number mod-11 check)1691669019293
russia.tax.ogrnipRussian OGRNIP for a sole proprietor (15 digits, whole-number mod-13 check)361197456067674
slovakia.tax.vatSlovak VAT / IC DPH (SK + 10 digits, no checksum)SK2872567116
slovenia.tax.vatSlovenian VAT / ID za DDV (SI + 7-digit base + weighted mod-11 check)SI47349972
spain.docs.dniSpanish DNI (8 digits + mod-23 control letter)73742916V
spain.docs.nieSpanish NIE (X/Y/Z + 7 digits + mod-23 control letter)X3914405N
spain.tax.cifSpanish CIF (entity-type letter + 7 digits + Luhn-style control digit)A43753219
spain.tax.vatSpanish VAT (ES + CIF)ESH50310499
sweden.tax.vatSwedish VAT / Momsnr (SE + 9-digit base + Luhn check + literal "01")SE977841031701
united_kingdom.docs.ninoUK National Insurance number (2 letters + 6 digits + suffix A–D; no checksum)QQ995347B
uruguay.docs.ciUruguay Cedula de Identidad (up to 7-digit body + weighted mod-10 check digit)01252600
uruguay.tax.rutUruguay RUT (11-digit body + weighted mod-11 check)218883180011
usa.docs.npiUS National Provider Identifier (9 digits + Luhn check over the 80840 prefix)1185286543
usa.docs.ssnUS Social Security number (area 001–899 excl. 666, group 01–99, serial 0001–9999)003060008
usa.finance.aba_routingUS ABA routing number (8 digits + mod-10 [3,7,1] check)649946910
usa.tax.einUS Employer Identification Number (valid IRS prefix + 7 digits; no checksum)678895040
usa.tax.itinUS ITIN (9 + 2 digits + valid group + 4 digits; no checksum)975531718
venezuela.docs.ciVenezuela Cedula de Identidad (V/E prefix + 7–8 digit body, no check digit)E7831675
venezuela.tax.rifVenezuela RIF (V/E/J/P/G prefix + 8-digit body + weighted mod-11 check digit)V919623361

How the check digits are built​

The checksum logic isn't buried in compiled code — each pack computes its check digit declaratively with the <compute> tag, right next to the data. If a country changes its rules, you edit the pack's text file, not the engine. The bodies of these identifiers are drawn with the regex and number generators, and then <compute> appends the check digit. See Data Packs for how a pack is structured, and Writing your own pack for how to add one.

See also​