A DTC, or diagnostic trouble code, is a five-character code like P0420 that your car's computer stores when one of its self-tests finds a fault. The letter tells you which area of the car it came from, and the four characters after it narrow down which test failed.

Key takeaways

  • DTC = diagnostic trouble code. It's what the computer saves when a self-test fails, and what turns on the check engine light.
  • Five characters: a letter (P, B, C or U), then four digits. Example: P0301 is a powertrain code for a misfire in cylinder 1.
  • P0 is generic, P1 is manufacturer-specific. A P0 code means the same thing on every car. A P1 code needs a make-specific definition.
  • Extra characters like -00 or -68 are a failure-type byte that describes the kind of fault. 00 means no extra detail.
  • A code names a failed test, not a failed part. It's where diagnosis starts.

What a DTC Is

Modern cars run continuous self-tests on the systems that affect emissions, and many cars also test brakes, airbags, the body electronics and the network that connects them. When a test fails, the module that ran it stores a code. That code is the DTC.

The codes follow a published standard, SAE J2012, which defines the standardized trouble codes that on-board diagnostic systems report. That's why a P0420 means the same thing whether you read it on a Honda or a Chevrolet.

On the engine side, a stored code is tied directly to the check engine light. California's OBD regulation requires a confirmed code to be stored within 10 seconds whenever the light turns on. Before that, a code may sit as "pending" after a fault is seen once. See pending, stored and permanent codes for the difference.

DTC vs OBD-II

People use "DTC," "OBD2 code" and "check engine code" interchangeably. They overlap, but they aren't the same thing.

TermWhat it is
OBD-IIThe on-board diagnostic *system*. CARB notes that the US EPA requires it on all 1996-and-newer passenger cars and trucks
DTCThe *code* a module stores when a test fails
OBD2 codeA DTC read through the standard OBD-II port and protocol, usually an engine or emissions code
Check engine codeA DTC that turned on (or would turn on) the check engine light

The practical difference: a basic OBD-II reader is built to read emissions-related engine codes. Your car may also store B, C and U codes in other modules (airbag, ABS, body control) that need a more capable scan tool. That's why a shop's scan can turn up codes your reader didn't show.

The Five Characters, Position by Position

Take P0301 as the example.

First character: the system.

LetterArea
PPowertrain: engine, transmission, emissions
BBody: airbags, seats, lighting, climate
CChassis: brakes, steering, suspension
UNetwork: communication between modules

Second character: generic or manufacturer. 0 means a generic code. For powertrain codes, Innova's scan tool documentation says codes starting P0, P2 and some P3 are generic, while P1 and some P3 codes are manufacturer-specific. More on this below.

Third character: the subsystem (for P0 codes). Delphi's diagnostic guide lists these groups:

Third characterSubsystemExamples on this site
1Fuel and air meteringP0101, P0171
2Fuel and air metering—
3Ignition system or misfireP0300, P0301
4Auxiliary emission controlsP0420, P0455
5Vehicle speed and idle control—
6Computer output circuits—
7 and 8TransmissionP0700

Codes with a 0 in the third position, such as the valve timing code P0016, sit outside that list; look those up individually.

Fourth and fifth characters: the specific fault. These pin down the test. In P0301, "01" is cylinder 1; P0302 is cylinder 2, and so on. In P0420, "20" identifies the bank 1 catalyst efficiency test.

So P0301 reads as: Powertrain, generic (0), ignition/misfire group (3), cylinder 01.

Generic (P0) vs Manufacturer (P1) Codes

Generic codes (P0xxx, most P2xxx) mean the same thing on every vehicle. Any OBD-II reader will give the right definition. All of the code pages on this site are generic codes for that reason.

Manufacturer-specific codes (P1xxx and some P3xxx) are defined by each automaker. The same number can mean entirely different faults on two different makes. A generic reader may show the code but give no definition, or a wrong one.

For a manufacturer code:

  • Look it up for your exact make, ideally in the manufacturer's service information.
  • Don't trust a one-size-fits-all definition from a generic code list.
  • A dealer or a shop with a make-specific scan tool can give the exact meaning and test.

Delphi notes the split is different outside powertrain: B0, C0 and U0 codes (plus B3, C3, U3) are generic, while the 1 and 2 ranges are manufacturer-specific.

Codes With Extra Characters: -00, -68 and Similar

Some scan tools and manufacturer systems show seven characters instead of five, for example P0420-00, P0420 00 or U0100-00. The two extra characters are a failure-type byte. GM calls it a "symptom byte."

SAE J2012 includes a list of failure types that applies when these three-byte codes are used. The extra byte doesn't change which test failed. It adds detail about *how* it failed, so one base code can describe several different faults.

Some examples, taken from codes listed in an NHTSA investigation document:

Full codeBase codeFailure type
U0100-00U0100: lost communication with the engine computer00: no sub-type information
B1D23-68B1D23: overheat sensor (manufacturer code)68: event information

What this means for you:

  • -00 adds nothing. P0420-00 means the same as P0420. Look up the base code.
  • Other values add detail. A suffix like -68 ("event information") or a GM symptom byte such as an open or short circuit narrows down the fault. Make-specific service information explains it best.
  • Search the base code first. For U0416-68, start with U0416 and the vehicle's make; the -68 is the type of failure.

A Code Names a Failed Test, Not a Failed Part

This is the most common misunderstanding about DTCs. A code says which self-test failed. It doesn't say which part to replace.

  • P0420 means the catalytic converter efficiency test failed. A worn converter is one cause; misfires, exhaust leaks and oxygen sensor problems can all produce the same result.
  • P0171 means the engine is running lean. The cause could be a vacuum leak, a dirty airflow sensor or low fuel delivery.
  • P0301 means cylinder 1 misfired. The coil, plug, injector or compression could be to blame.

That's why each code page here ranks causes with evidence labels and points to the next test, instead of naming a single part. And when you have several codes, they often share one cause. The multi-code tool shows which code is likely the primary one.

If your check engine light is on and you haven't read the code yet, start with the check engine light guide.