National Drug Code.

Three 10-digit layouts, the 11-digit billing canonicalization, "check": "none", and the GTIN embedding behind the "3" prefix.

Ten digits, three readings — blown out in parallel.

0002 labeler 4-4-2 reading
3227 product
30 package
00023 labeler 5-3-2 reading
227 product
30 package
00023 labeler 5-4-1 reading
2273 product
0 package

Every plausible split, side by side: the layout is data from the labeler code. The 11-digit billing form zero-pads to 5-4-2: 00002-3227-30.

NDC 0002-3227-30
check   none — the scheme defines no check digit
        "check": "none" — the NDC carries no check digit

The row.

schemendc
grammar10 digits in three layouts — 4-4-2, 5-3-2, 5-4-1 (labeler–product–package); the layout is data from the labeler code, not guessable from the digits alone.
check digitNone — structurally validated only; the output says "check": "none".
canonical formThe 11-digit 5-4-2 form (the billing convention), zero-padded per segment.
symbologiesThe US drug UPC/GTIN embeds the NDC behind the “3” prefix; serialized DSCSA packs carry GS1 DataMatrix with AI 01+21+17+10
enrichmentopenFDA drug/ndc (CC0), updated daily, inside the provenance envelope
join ruleGTIN-14/UPC embedding extraction returns separate wrapper-vs-contents verdicts: the GTIN can pass mod-10 while the embedded NDC is the real identity.
pinned digestndc sha256:c4fa97fcfac0ca834c750b6700e3bcf5cba3631f2f906217d9b9360b955108fa
as data/schemes/ndc.json

In practice.

The NDC is the registry's standing argument for typed verdict labels: a vocabulary that can only say pass or fail has no answer for a scheme with no check digit. The closed label set — mod10 pass · iso3779 mod11 pass · none · best-effort — is output contract, not prose.

On the blog.

  • NDC: the identifier with no check digit, and what validation means without one

    The National Drug Code is ten digits in three segments and carries no check digit at all — so "valid" can only ever mean structurally parseable plus present in the registry. The NDC is the scheme that forces a resolver to be honest about validation tiers, and the honesty generalizes.

  • Pharma already lives in 2027: DSCSA as the serialization precedent

    Every US prescription-drug package already carries a GS1 DataMatrix with GTIN, serial, lot, and expiry under DSCSA — the one US vertical where serialized 2D is universal at the unit level. Parsed live, with the NDC-inside-GTIN embedding shown, and the lessons a cross-vertical CTO can actually reuse.

Get an API key.

The local verbs run from npx barcoding.dev today with no key. A key opens the network half of the verb set.