Affiliate Disclosure
Some links on this page are affiliate links. As an Amazon Associate, we earn from qualifying purchases — at no extra cost to you. We do not buy, test, or physically handle the products we cover; our rankings come from aggregated owner reviews, ratings and expert consensus. Commissions never change our verdicts. How we rank & full disclosure.
You plug in your scan tool and it spits back something like P0420. Fine. But what does that string of letters and numbers actually mean, and how do you know whether you need a $12 sensor or a $1,200 catalytic converter? That answer starts with understanding the code format itself — because every OBD2 diagnostic trouble code (DTC) is built on a five-character system that tells you exactly which part of the car is complaining, and how serious the fault is.
This page is part of our Reading OBD2 Codes hub. If you haven't used a scan tool before, start with What Is OBD2? first, then come back here. If you already know the basics, read on.
The Five-Character DTC Structure
Every OBD2 code — regardless of make, model, or year — follows the same template:
[Letter] [Digit] [Digit] [Digit] [Digit]
1 2 3 4 5
That's it. Five characters. Each one carries specific meaning. Once you know the key, any code becomes readable without Googling. Here's the full breakdown:
| Position | What it is | Possible values | What it tells you |
|---|---|---|---|
| 1st character | System letter | P, B, C, U | Which vehicle system threw the fault |
| 2nd character | Code type digit | 0, 1, 2, 3 | Generic (SAE standard) vs. manufacturer-specific |
| 3rd character | Subsystem digit | 0–9 | Which subsystem within that category |
| 4th & 5th characters | Fault number | 00–99 | The specific fault within that subsystem |
Character 1: The System Letter (P, B, C, U)
The first character is a letter that groups the fault into one of four vehicle systems. This alone tells you whether you're dealing with something that affects how the car runs, or something more to do with electronics and convenience systems.
- P — Powertrain: Engine, transmission, fuel system, emissions. This is the most common category. If your check engine light is on, there's a very high chance it's a P-code.
- B — Body: Airbags, seat belts, climate control, power windows, lighting. These codes often won't trigger the check engine light — they're usually flagged in a separate body control module.
- C — Chassis: ABS, traction control, steering, suspension, braking systems. C-codes show up when your ABS or stability control warning lights activate.
- U — Network / Communication: The data bus — how modules talk to each other (CAN bus, ISO, J1850). A U-code means one module has lost communication with another, which can cause cascading faults across multiple systems.
Character 2: Generic vs. Manufacturer-Specific
This is the digit most DIYers overlook, but it's crucial. The second character tells you whether the code is a universal standard or something specific to your make.
- 0 — Generic (SAE standard): Defined by the Society of Automotive Engineers. Every OBD2-compliant vehicle uses the same definition for these codes. A P0420 on a Toyota means the same thing as a P0420 on a Volkswagen.
- 1 — Manufacturer-specific: This is where things get make-dependent. A P1xxx code from Honda and a P1xxx code from Ford may describe completely different faults. You must look these up against your specific manufacturer's documentation — a generic code list won't cut it.
- 2 — SAE-defined (some systems) or manufacturer-specific (others): P2xxx codes are largely generic. In other system letters (B, C, U), the 2 position may still be manufacturer territory. Check carefully.
- 3 — SAE-defined or manufacturer-specific depending on system: Similar situation to 2. For powertrain codes (P3xxx), some are SAE-defined and some are manufacturer. Again, context matters.
The practical takeaway: if the second character is a 0, your standard OBD2 code list is reliable. If it's a 1, go find the factory service manual or a make-specific forum before ordering parts.
Character 3: The Subsystem
For powertrain (P) codes, the third digit narrows things down to a specific subsystem within the engine or drivetrain. Here's the standard mapping:
| 3rd Digit | Subsystem (Powertrain) |
|---|---|
| 0 | Fuel and air metering (general) |
| 1 | Fuel and air metering |
| 2 | Fuel and air metering — injector circuit |
| 3 | Ignition system or misfire |
| 4 | Auxiliary emissions controls |
| 5 | Vehicle speed, idle control, auxiliary inputs |
| 6 | Computer output systems |
| 7 | Transmission |
| 8 | Transmission (continued) |
| 9 | SAE reserved / manufacturer-defined |
So when you see P03xx, you already know it's an ignition or misfire issue before you even look at the last two digits. That's useful when you're standing in a cold car park.
Characters 4 and 5: The Specific Fault Number
The final two digits identify the exact fault within that subsystem. These run from 00 to 99 and are defined either by SAE (for generic codes) or by the manufacturer (for P1xxx etc.). At this point the meaning gets granular — cylinder number, sensor location, circuit condition (open, short, high voltage, low voltage), and so on.
You won't memorize all of these, and you don't need to. What matters is understanding characters 1 through 3, so you already know the territory before you look up the specifics.
Worked Examples: Decoding Real Codes
P0301 — Cylinder 1 Misfire Detected
| Character | Value | Meaning |
|---|---|---|
| 1st | P | Powertrain |
| 2nd | 0 | Generic / SAE-standard — same meaning on any car |
| 3rd | 3 | Ignition system or misfire |
| 4th & 5th | 01 | Cylinder 1 specifically (P0302 = cylinder 2, P0303 = cylinder 3, and so on) |
Before you read a single search result, you already know: powertrain, generic code, ignition/misfire, cylinder 1. Now you're looking at spark plugs, coil packs, fuel injectors, or compression — in that order of likelihood and cost.
P0420 — Catalyst System Efficiency Below Threshold (Bank 1)
| Character | Value | Meaning |
|---|---|---|
| 1st | P | Powertrain |
| 2nd | 0 | Generic — universal definition |
| 3rd | 4 | Auxiliary emissions controls |
| 4th & 5th | 20 | Catalyst system efficiency below threshold, Bank 1 |
P0420 is one of the most searched codes online and also one of the most misdiagnosed. The code structure tells you it's an emissions-control fault, not an ignition or fuel delivery issue. That knowledge alone should steer you away from the forums that suggest "try premium fuel" — this one's about catalytic converter performance or the oxygen sensors that monitor it. See our most common OBD2 codes guide for a deeper breakdown of P0420 specifically.
U0100 — Lost Communication With ECM/PCM
| Character | Value | Meaning |
|---|---|---|
| 1st | U | Network / Communication bus |
| 2nd | 0 | Generic — SAE-defined |
| 3rd | 1 | Data bus communications |
| 4th & 5th | 00 | Lost communication with the ECM/PCM (the main engine control module) |
U-codes like this one can look alarming because they often show up alongside a long list of other faults. In many cases, the U0100 is the root cause — if the ECM isn't talking to other modules, those modules will each throw their own codes. Fix the communication fault first (check wiring, grounds, the CAN bus), and the downstream codes frequently clear themselves.
Why P1xxx Codes Need a Make-Specific Lookup
When you see a 1 as the second character, the SAE rulebook no longer applies. Manufacturers have their own internal fault libraries for P1xxx, B1xxx, C1xxx, and U1xxx codes, and they don't have to share them publicly. A P1399 on a Honda means "Random/Multiple Cylinder Misfire Detected" — Honda's own catch-all misfire code. A P1399 on a different make could mean something completely different, or not exist at all.
The right approach for any P1 code:
- Note the exact make, model, and year
- Search a make-specific forum or factory service manual (FSM)
- Don't trust a generic DTC list — it won't have accurate definitions for manufacturer codes
- If you have access to a professional scan tool with manufacturer data, use it
This is one of those cases where the format knowledge pays off — you see the 1 in position two and you immediately know to change your lookup strategy before you do anything else.
Pending, Confirmed, and Permanent Codes
The code format itself doesn't tell you the code's status, but your scan tool will. Most tools show codes as one of three types:
- Pending: The fault has been detected once but not confirmed across multiple drive cycles. The check engine light may not be on yet.
- Confirmed / Active: The fault has been seen consistently. The MIL (Malfunction Indicator Lamp) is illuminated.
- Permanent: The code was confirmed and cannot be cleared by a scan tool — it requires a successful drive cycle without the fault recurring. This exists so emissions testers can't be fooled by someone clearing codes before a test.
Understanding status matters almost as much as understanding the code itself. A pending P0420 on an older vehicle might be a fluke or a marginal sensor — a confirmed P0420 with freeze frame data showing consistent conditions is a different conversation.
Putting It Together: Your Decode Checklist
Next time a code appears on your scan tool, run through this in order before you search anything:
- What system? Read character 1. P, B, C, or U.
- Generic or manufacturer? Read character 2. 0 = standard lookup. 1 = make-specific lookup.
- Which subsystem? Read character 3. You now know the territory — misfire, emissions, fuel, transmission, network, etc.
- What's the specific fault? Look up the last two digits in context of the above.
- What's the status? Check your scan tool — pending, confirmed, or permanent.
That's the whole framework. Five characters, five questions, and you go from a cryptic alphanumeric string to a meaningful diagnosis starting point.
Ready to go further? Walk through the full process with our step-by-step guide to reading a code, or check which codes are statistically the most likely culprits in our most common OBD2 codes reference.
Recommended Products

Best for DIYers who want pro data on their phone
- Full OEM-level code coverage
- Repair reports from real fixes
- Reads ABS/SRS/live data
- Works with iOS & Android
Why buy it: the best all-round scanner — it not only reads the P/B/C/U code but explains what the format means with pro-grade data and repair reports.

Best for enthusiasts who want speed and security
- Fast, secure Bluetooth
- Deep OEM & performance data
- Custom PIDs and dashboards
Why buy it: the fastest, most capable Bluetooth dongle for tinkerers who want manufacturer-specific codes as well as generic ones.

Best for people who want a standalone tool
- No phone needed
- Clear code definitions on-screen
- Live data and freeze-frame
Why buy it: a self-contained reader that prints the code and its plain-English definition right on the screen.

Best for a do-it-all budget pick
- Handheld + Bluetooth in one
- Live data & battery test
- Great price for the features
Why buy it: handheld and phone modes in one for the price of a basic reader — an easy first scanner for decoding codes yourself.
Prices are pulled from Amazon and were accurate as of Aug 22, 2026, 6:54 PM EDT. Product prices and availability are subject to change — the live price is shown on Amazon.
