1. Volscan
  2. Blog
  3. Volvo VIN decoder

Volvo VIN decoder: what the 17 characters tell a diagnostic tool

Before a diagnostic tool can read a single fault code it has to know which car it is talking to: the model, the model year, the engine and the gearbox decide which control modules exist, where they sit and what they understand. All of that starts with the VIN.

· 8 min read

Diagram: the VIN YV1DZA5C6H2008806 in 17 boxes; positions 1–3 YV1 marked as manufacturer, 4–5 DZ as model (XC60), 6–7 A5 as engine, 10 H as model year 2017, 12–17 as the chassis number; below, the model-year letter cycle from 6 = 2006 to H = 2017
A 2017 XC60: manufacturer, model code, engine code, model-year letter and chassis number, each in its own positions. The two highlighted codes are the ones a tool has to look up in a table.

The layout of a Volvo VIN

Every car sold since the 1980s carries a 17-character vehicle identification number. The first three characters are the world manufacturer identifier — YV1 for Volvo Cars (the XC90 and some other SUVs use YV4). Positions 4–9 describe the vehicle, position 10 is the model year, position 11 the assembly plant, and positions 12–17 are the serial, which Volvo calls the chassis number.

That much is common to every make. What the characters between the manufacturer and the serial mean, though, is up to the manufacturer, and this is where a Volvo-specific decoder earns its keep. Volvo's own diagnostic data decodes a VIN with a set of rules: each rule says "if the characters in positions a–b read X, and the model-year code is Y, and the chassis number is between M and N, then this is model Z of model year Y". A second set of rules does the same for the engine and the gearbox. The sections below follow that order.

In short: a Volvo VIN is not decoded character by character but by matching rules — model code, year code and chassis range together. A tool that only looks at one of them gets the wrong car surprisingly often.

Positions 4–5: the model code

For cars of the last two decades the model is a two-letter code in positions 4 and 5. Our two test cars illustrate it: MC is the C70 of 2006 onwards and DZ is the XC60. Volvo's data for the 2006–2015 era knows about seventy such two-letter codes, because a code is tied to a body and platform rather than to a badge — a saloon and an estate of the same model get different codes, and a facelift or a platform change can bring a new one.

Older cars are less tidy. For some 1980s and 1990s models the rule reads positions 3–4 or 3–5 instead, and a few use positions 7–8. A decoder therefore cannot assume where the model code lives; it has to try the rules that apply to the era.

The model code is the first thing a tool resolves, and the most important: it selects the vehicle profile — the list of control modules in the car, their addresses and buses, and the protocol each one speaks. Get the model wrong and every later step is wrong too. Our guide to Volvo's P1, P2 and P3 platforms explains how much the module layout differs between model families.

Positions 6–7: the engine code

Positions 6 and 7 carry a two-character engine code. It is not the engine designation itself — nothing in the VIN spells out D5244T8 — but a code that is looked up per model and model year. On a 2008 C70, for example, 67 stands for the B5254T7 turbo petrol, 38 for the B5244S4 and 66 for the B5244S5. The same two characters can mean a different engine on a different model or in a different year, which is why the lookup is tied to the model code.

The gearbox is identified by a separate single-character code in the same rule set: on the C70 one value stands for the M66 six-speed manual, another for the AW55 automatic.

Why does a diagnostic tool care? Because the engine and gearbox decide which engine control module (ECM) and transmission control module (TCM) are fitted. Volvo's diagnostic data keeps those two as separate profile fragments that are added to the body profile once the engine and gearbox are known: a D5 diesel with a Bosch EDC16 module has different fault codes, different sensors and different routines from a petrol five-cylinder with a Denso module, even in the same C70 body.

Position 10: the model year, with a catch

Position 10 is the model-year code. It cycles through digits and letters, skipping I, O, Q, U, Z and 0, and repeats every 30 years:

Code6789ABCDEFGHJK
Model year20062007200820092010201120122013201420152016201720182019

Two catches. First, a Volvo model year is not a calendar year: it starts in the spring or summer of the previous calendar year, so a car registered in late 2007 can be a 2008 model with the letter 8. Second, because the cycle repeats, the letter H on its own could mean 1987 or 2017. Volvo's rules resolve both ambiguities with the chassis number: each model year of each model has its own chassis range, and the rule only matches when the VIN's chassis number falls inside it. In the data, model year 2007 of the C70 is a rule with year code 7 and chassis numbers from 10000 to 39999; the 2006 rule has year code 6 and chassis 1 to 9999.

This is also the point where many simple decoders stop being useful. They print "2017" from the letter and leave it there. A diagnostic tool has to go on to the exact model-year profile, and for that the chassis number matters.

Positions 12–17: the chassis number

The last six characters are the chassis number. Within one model and model year it is simply a counter, and the rules give each year a range. That makes it a second key next to the year letter — and an important one on cars from before 2001, where position 10 was not always used consistently.

The ranges do not grow forever. When a model is updated the counter restarts, and the rules for the last model year in a data set often end at 999999 simply because nobody wrote a later rule. Keep that in mind for the next section.

How a tool reads the VIN from the car

The VIN on the windscreen plate is fine for typing in, but a diagnostic tool wants the VIN the car itself reports — it rules out typos and tells the tool the connection works. How it is read depends on the car's generation:

The difference matters in practice: a generic scanner reads the VIN of a P3 car and then finds almost nothing else, while on a P1 car it may not even get the VIN. Why that is, and what it takes to read every module, is in why a generic OBD-II scanner misses Volvo fault codes and Volvo HS-CAN and LS-CAN explained.

When the car is newer than the data

Every decoder runs on a snapshot of Volvo's data, and the snapshot has an end. The 2014 release we work from describes cars up to model year 2015. Decode a 2017 XC60 with it — VIN starting YV1DZA5C6H, chassis 008806 — and two things go wrong at once:

  1. The letter H has no 2017 rule for the XC60. A decoder that then falls back on the chassis range matches 008806 against the XC60's 2009 rule (chassis 1–49999, year code 9 ignored) and confidently reports a 2009 car, because the counter restarted after the 2015 range ended at 999999. We saw exactly that in a session log before fixing it.
  2. The engine code A5 is not in the data either: the D5244T21 diesel arrived after the snapshot. With no engine there is no ECM profile fragment, and the engine module simply does not appear in the list.

The honest way out, which is what Volscan now does, is to trust the year letter over the chassis range when the letter is newer than anything the data knows, use the newest profile of that model (2015) and say so — "VIN 2017, profile 2015". The engine is then not guessed from the VIN at all: the car is asked. The central electronic module keeps a configuration record that names the engine, and from that the tool picks the exact or the nearest known engine. That record is the subject of our article on the CEM vehicle configuration.

What the tool must never do is fill the gaps with lookalikes. An engine profile chosen because its name is similar, or a module address copied from a different model, can send a request the module does not expect. Volscan marks such a profile as approximate, keeps every write command off until a module's identity is confirmed on the car, and reads everything else as usual — fault codes, sensors and module identification work on a 2017 car with a 2015 profile because the modules that did not change still answer the same way.

FAQ

Which VIN position is the model year on a Volvo?

Position 10. It is a letter or digit that repeats every 30 years: 6 = 2006, 7 = 2007, 8 = 2008, 9 = 2009, A = 2010, B = 2011, C = 2012, D = 2013, E = 2014, F = 2015, G = 2016, H = 2017 and so on. I, O, Q, U, Z and 0 are never used. A Volvo model year runs ahead of the calendar year, so a car built in late 2007 can carry the 2008 letter.

Where is the engine in a Volvo VIN?

Positions 6 and 7 carry an engine code that is looked up per model and model year. On a 2008 C70, for example, 67 means the B5254T7 turbo petrol and 38 the B5244S4. The code is not the engine designation itself; a diagnostic tool needs a table to turn it into D5244T8 or B5254T7, and that table only covers the engines known when the data was published.

Why does my diagnostic tool show the wrong year or no engine for my Volvo?

Usually because the car is newer than the tool's data. A 2017 XC60 has model-year letter H and engine code A5; data that ends at model year 2015 knows neither. Some tools then fall back on the chassis number range, which restarts after the last known year and points at a much older car. A better fallback is to trust the year letter, use the newest known profile and read the engine from the car's own configuration.