Reference/RxNorm vs NDC

RxNorm vs. NDC

RxNorm and NDC are the two most widely used drug identifiers in U.S. healthcare data — but they identify different things. RxNorm identifies what a drug is (ingredient, form, strength). NDC identifies which package of that drug was dispensed. Understanding the distinction is essential for anyone working with pharmacy claims, EHR data, or drug pricing.

RxNorm

MaintainerNLM / NIH
IdentifierRXCUI
LevelDrug concept
UpdatedWeekly

NDC

MaintainerFDA
IdentifierNDC (10/11-digit)
LevelDrug package
UpdatedContinuous

Side-by-Side Comparison

The following table compares RxNorm and NDC across the dimensions that matter most for data engineering and analytics.

DimensionRxNormNDC
Full nameRxNorm (NLM Clinical Drug Nomenclature)National Drug Code
Maintained byNLM / NIHFDA
IdentifierRXCUI (integer)NDC (10- or 11-digit string)
What it identifiesA clinical drug concept (ingredient + form + strength)A specific drug package (labeler + product + package)
GranularityDrug concept level — one RXCUI covers all package sizes from all manufacturers of the same genericPackage level — each manufacturer, package size, and formulation gets a unique NDC
HierarchyYes — IN → SCDF → SCD/SBD with explicit parent–child relationshipsFlat — NDC segments (labeler, product, package) are encoded in the code itself but there is no formal hierarchy
StabilityStable — RXCUIs are never reused for a different conceptUnstable — NDCs can be reassigned to different drugs after 10 years
Typical cardinality~115K active concepts~300K+ active codes
Update cadenceWeekly (NLM RxNorm release)Continuous (FDA NDC Directory)
Primary useClinical interoperability, EHR, e-prescribing, drug analyticsPharmacy dispensing, claims adjudication, inventory

The Many-to-One Relationship

Multiple NDCs map to a single RXCUI. This is the key structural relationship between the two systems. Every generic manufacturer, every package size, and every labeler-specific product gets its own NDC — but they all roll up to the same RxNorm concept if the drug, form, and strength are identical.

NDCManufacturer / PackageRXCUI
00071-0215-23Pfizer 30-count bottle617321
00378-3950-01Mylan 100-count bottle617314
00591-3750-01Actavis 100-count bottle617314
00071-0215-40Pfizer 90-count bottle617321

Four different NDCs (two manufacturers, two package sizes) map to just two RXCUIs — one generic (SCD) and one branded (SBD).

When to Use Which

Use NDC when…

  • Processing pharmacy claims (NDC is the dispensing-level identifier on every claim)
  • Matching to NADAC or other NDC-level pricing benchmarks
  • Tracking specific manufacturers, package sizes, or labelers
  • Working with FDA drug listing or recall data

Use RxNorm when…

  • Aggregating utilization or spend across manufacturers and package sizes
  • Joining clinical data (EHR, e-prescribing) to claims data
  • Building drug hierarchies (roll up from product → ingredient)
  • Mapping drugs to enrichment layers like ICD-10 indications or ATC classes

Mapping Between Them: The NDC–RxNorm Crosswalk

In practice, most analytics workflows need both identifiers. Claims arrive with NDCs; enrichment layers are keyed on RXCUIs. The bridge is a crosswalk table that maps each NDC to its corresponding RXCUI.

Example — join claims NDC to RxNorm drug hierarchy

SELECT
    c.ndc,
    n.drug_id,
    d.drug_name,
    d.ingredient,
    c.total_amount_reimbursed
FROM claims c
JOIN ndc_rxnorm n ON n.ndc11 = c.ndc
JOIN rxnorm.drug_detail d ON d.drug_id = n.drug_id;

The crosswalk handles NDC normalization (10→11 digit conversion, zero-padding) and resolves each NDC to the correct SCD or SBD concept. For a detailed walkthrough, see the RxNorm–NDC Crosswalk and NDC Normalization Guide.

How TwinFyRx bridges RxNorm and NDC

TwinFyRx maintains a normalized ndc_rxnorm crosswalk updated weekly from the NLM RxNorm release. Every NDC is resolved to an 11-digit form and mapped to a drug_id (SCD/SBD RXCUI), which serves as the primary key across all enrichment layers — pricing, indications, therapy attributes, and suspecting rules.

View the data model →