Free UDI Barcode Decoder
Paste the UDI from a medical device label — the raw scan or the bracketed human-readable form. This tool separates the Device Identifier from the Production Identifiers, checks the GTIN check digit, expands the dates and tells you which issuing agency the label uses.
Paste either form: the bracketed human-readable UDI printed on the label, or the raw string
your scanner returns. A literal <GS>
works where the invisible separator belongs. Nothing is uploaded — the decoding runs entirely
in this browser.
How a UDI Is Built
A Unique Device Identifier is not one number. It is two parts with different jobs, and almost every practical question about a device label comes down to telling them apart.
UDI-DI — the Device Identifier
Fixed and mandatory. It identifies the labeler and the specific version or model, so it is
identical on every unit of that model. This is the key to the device record in the
FDA's GUDID database. In GS1 format it is the GTIN-14 in AI (01).
UDI-PI — the Production Identifier
Variable and conditional. It describes this particular unit — its lot, its serial
number, when it was made, when it expires. It is never stored in GUDID. In GS1 format these
are AIs (10),
(11),
(17) and
(21).
The consequence is worth stating plainly, because it is the single most common misunderstanding about UDI: you can look up a device from the DI, and you can never look up a unit from the PI. GUDID holds the DI as the record key and stores only yes/no flags recording which PI attributes the label is supposed to carry — not their values. A lot number means something only to the manufacturer who assigned it.
The fields this decoder reads
| AI | Part | Meaning | Format |
|---|---|---|---|
| (01) | DI | Device Identifier — the GTIN-14 identifying labeler and model | 14 digits, mod-10 check digit |
| (17) | PI | Expiration date | 6 digits, YYMMDD |
| (11) | PI | Manufacturing date | 6 digits, YYMMDD |
| (10) | PI | Lot or batch number | up to 20 characters, variable |
| (21) | PI | Serial number | up to 20 characters, variable |
| (7003) | PI | Expiration date and time | 10 digits, YYMMDDHHMM |
| (240) | Other | Additional device identification | up to 30 characters, variable |
| (30) | Other | Quantity | up to 8 digits, variable |
| (8012) | Other | Software version | up to 20 characters, variable |
An Application Identifier outside this set is reported as unrecognised rather than guessed at. If you need the full GS1 identifier set — logistics, measures, prices, origin — use the GS1 Barcode Decoder instead. This page is deliberately narrow: it answers UDI questions about a UDI string.
Three Issuing Agencies, Three Formats
The FDA has accredited three organisations to issue UDIs, and each uses its own data structure. Before you can read a UDI you have to know which one you are looking at — and the first character tells you.
- GS1 — starts with a digit, typically
01. Built from Application Identifiers. This is what the large majority of device labels use, and the only format this decoder splits into fields. - HIBCC — starts with
+, the HIBC flag character, followed by a four-character Labeler Identification Code. Common in US hospital supply. Not built from Application Identifiers, so a GS1 parser cannot read it. - ICCBBA — starts with
=, an ISBT 128 data identifier. Used for human cells, tissues and blood products.
This decoder names the agency for all three and tells you when it cannot go further, rather than forcing a HIBCC string through GS1 rules and returning confident nonsense. The authoritative format tables are in the FDA's UDI formats by FDA-Accredited Issuing Agency document (version 1.4, 1 September 2025).
When This Is Useful
Checking a label before a print run
A labelling error found after 50,000 cartons are printed is expensive. Paste the string your label software produces and confirm the DI's check digit, that the dates are real calendar dates, and that no field exceeds its GS1 maximum length.
Receiving inspection and expiry checks
Scan an incoming device, paste the payload, and read the expiry date as a date rather than six digits. The decoder says plainly whether the labelled shelf life has already passed.
Working out why a scan will not parse
A UDI that your hospital system rejects usually has a specific, findable fault: a missing FNC1 separator after a variable-length lot number, a truncated field, a transposed digit, or an AI that belongs on a shipping carton rather than a unit of use. Each of those produces a different message here.
Getting the DI out to query GUDID
The DI is the only part of a UDI that a public registry can resolve. Extract it here, then take it to AccessGUDID. Your lot and serial numbers never leave your browser, which matters in a clinical setting where they can be linked to a patient.
Going Further
- What a medical device UDI barcode actually contains — the background to this tool: who has to apply a UDI, what GUDID is for, and how the rule came about.
- What GS1 DataMatrix is — the symbol most device labels use to carry the UDI, and why it is not an ordinary Data Matrix.
- GS1 Barcode Decoder — the general-purpose version, covering every GS1 Application Identifier rather than the UDI subset.
- GTIN Converter — if the DI you extracted needs padding to 14 digits before a database lookup.
- The FDA's 12-digit NDC and 2D barcode rule — the equivalent identification question on the pharmaceutical side.
- The EU Digital Product Passport — where the same identify-every-unit logic is heading outside healthcare.
Frequently Asked Questions
What is the difference between the UDI-DI and the UDI-PI?
The Device Identifier (DI) is the fixed part: it identifies the labeler and the specific version or model, and it is the same on every unit of that model. The Production Identifier (PI) is the variable part that describes the individual unit — lot or batch, serial number, expiry date, manufacturing date. Under 21 CFR 801.3 the DI is mandatory and fixed, while the PI is conditional and variable. In GS1 format the DI is carried in AI (01) and the PI elements in AIs (10), (11), (17) and (21).
Which issuing agencies does this decoder handle?
The FDA has accredited three UDI issuing agencies: GS1, HIBCC and ICCBBA. This decoder parses GS1 format in full, because that is what the large majority of device labels use. It recognises HIBCC labels by their leading "+" flag character and ICCBBA / ISBT 128 labels by their leading "=" data identifier, and tells you which one you have — but it does not split those into fields, because they do not use GS1 Application Identifiers.
Why does my scan look like one unbroken run of digits?
The brackets in a printed UDI are a human-readable convention and are never encoded in the symbol. A scanner returns the raw concatenated element string. Fixed-length fields such as AI (01) and AI (17) need no separator because their length is predefined; variable-length fields such as a lot or serial number are terminated by FNC1, which most scanners return as ASCII 29. This tool accepts the bracketed form, the raw form, a literal <GS>, and a leading symbology identifier such as ]d2.
Can I look up the device from its UDI here?
No, and no tool that runs in your browser can. The FDA’s GUDID database holds only the DI portion, which acts as the key to the device record; it never contains Production Identifiers. So the DI this tool extracts is exactly what you would paste into AccessGUDID to identify the device, while the lot and serial numbers stay local to you. This decoder tells you what the label says, not what the registry says about it.
Does a valid check digit mean the UDI is genuine?
No. The mod-10 check digit only proves the fourteen digits are internally consistent, which catches a mistyped or misread digit. It cannot tell you that the number was ever issued to a real labeler or registered with the FDA. Only GUDID or the manufacturer can confirm that. A failing check digit, on the other hand, is conclusive: something is wrong with the number.
What does a day of 00 in an expiry date mean?
In a GS1 YYMMDD date, a day of 00 historically meant the last day of that month, used when only the year and month were known. GS1 withdrew that allowance for regulated healthcare products from 1 January 2025 under GSCN 21-040, so a newly labelled pack should carry a real day. This decoder still expands 00 to the month end and flags that it did, because stock labelled under the old rule is still in circulation.
Is the data I paste sent to a server?
No. The decoder is plain JavaScript that runs entirely in your browser, and nothing you paste leaves your device. That matters more here than on most tools: a device UDI carries a lot and serial number that tie to a specific implant or instrument, and in a clinical setting that can be linked to a patient.
My UDI has no expiry or lot number. Is it incomplete?
Not necessarily. The FDA requires the DI always, but the PI elements are conditional — which ones must appear depends on what the device label itself bears. A device with no lot control and no expiry date legitimately carries a UDI consisting of the DI alone. GUDID records yes/no flags for which PI attributes are supposed to be present, so the authoritative answer for a given device is in its GUDID record, not in the string.
Frequently Asked Questions
What is the difference between the UDI-DI and the UDI-PI?
The Device Identifier (DI) is the fixed part: it identifies the labeler and the specific version or model, and it is the same on every unit of that model. The Production Identifier (PI) is the variable part that describes the individual unit — lot or batch, serial number, expiry date, manufacturing date. Under 21 CFR 801.3 the DI is mandatory and fixed, while the PI is conditional and variable. In GS1 format the DI is carried in AI (01) and the PI elements in AIs (10), (11), (17) and (21).
Which issuing agencies does this decoder handle?
The FDA has accredited three UDI issuing agencies: GS1, HIBCC and ICCBBA. This decoder parses GS1 format in full, because that is what the large majority of device labels use. It recognises HIBCC labels by their leading "+" flag character and ICCBBA / ISBT 128 labels by their leading "=" data identifier, and tells you which one you have — but it does not split those into fields, because they do not use GS1 Application Identifiers.
Why does my scan look like one unbroken run of digits?
The brackets in a printed UDI are a human-readable convention and are never encoded in the symbol. A scanner returns the raw concatenated element string. Fixed-length fields such as AI (01) and AI (17) need no separator because their length is predefined; variable-length fields such as a lot or serial number are terminated by FNC1, which most scanners return as ASCII 29. This tool accepts the bracketed form, the raw form, a literal <GS>, and a leading symbology identifier such as ]d2.
Can I look up the device from its UDI here?
No, and no tool that runs in your browser can. The FDA’s GUDID database holds only the DI portion, which acts as the key to the device record; it never contains Production Identifiers. So the DI this tool extracts is exactly what you would paste into AccessGUDID to identify the device, while the lot and serial numbers stay local to you. This decoder tells you what the label says, not what the registry says about it.
Does a valid check digit mean the UDI is genuine?
No. The mod-10 check digit only proves the fourteen digits are internally consistent, which catches a mistyped or misread digit. It cannot tell you that the number was ever issued to a real labeler or registered with the FDA. Only GUDID or the manufacturer can confirm that. A failing check digit, on the other hand, is conclusive: something is wrong with the number.
What does a day of 00 in an expiry date mean?
In a GS1 YYMMDD date, a day of 00 historically meant the last day of that month, used when only the year and month were known. GS1 withdrew that allowance for regulated healthcare products from 1 January 2025 under GSCN 21-040, so a newly labelled pack should carry a real day. This decoder still expands 00 to the month end and flags that it did, because stock labelled under the old rule is still in circulation.
Is the data I paste sent to a server?
No. The decoder is plain JavaScript that runs entirely in your browser, and nothing you paste leaves your device. That matters more here than on most tools: a device UDI carries a lot and serial number that tie to a specific implant or instrument, and in a clinical setting that can be linked to a patient.
My UDI has no expiry or lot number. Is it incomplete?
Not necessarily. The FDA requires the DI always, but the PI elements are conditional — which ones must appear depends on what the device label itself bears. A device with no lot control and no expiry date legitimately carries a UDI consisting of the DI alone. GUDID records yes/no flags for which PI attributes are supposed to be present, so the authoritative answer for a given device is in its GUDID record, not in the string.
Scan the Label, Then Decode It Here
The Scan & Generate app reads the GS1 DataMatrix and GS1-128 symbols used on device labels and shows you the exact raw payload, separators included — paste it straight into this decoder.