Calculating ZCS Codes by Mad-Monkey

Kicking off the Technical Information on the ZCS codes...

Keith has provided a wealth of information over the past couple of years on the ZCS codes, which at present can only be generated by X-part/Omitec, and they charge a sum for the codes.

Keith posted up loads of information on the codes and what information makes them up.

TV Module: This denotes if TV module is fitted or not.
Tourer: This denotes if the vehicle is Tourer or not.
European Emission Legislation: This denotes if the vehicle complies to European Commission Directive legislation 2003 for emission or not.
Transit: This denotes the vehicle is in transport mode or not.
Self Levelling: This denotes if the vehicle is fitted with SLS or not.
Alarm: This denotes if auto is fitted with an alarm and if the alarm it is an US alarm or not.
Octane Number: The octane number is a measure of the fuel’s ability to resist knock in a standard engine test, and the term "Research Octane Number" (RON) is therefore often used. The higher the octane number, the better the knock resistance. This denotes the RON used.
Rain sensor: This denotes if a rain sensor is fitted or not.
FED Emission: This denotes the vehicle complies to the Federal Emission regulation or not.
Pencil Coils:This denotes if the vehicle is fitted with pencil coils or not.
Instrument Pack Sounder for PDC: This denotes if PDC is using the instrument pack sounder or not.
PDC: This denotes if the vehicle is fitted with park distance control or not.
Rear Wash Wipe: This denotes if the vehicle is fitted with rear wash wipe or not.
Daytime Running: This denotes if daytime running is enabled or disabled.
Headlamp Delay: This denotes if the headlamp delay feature is fitted or not.
Xenon Lights: This denotes if xenon lights are fitted or not.
Cruise Control: This denotes if cruise control is fitted or not.
Traction Control: This denotes if traction control is fitted or not.
One Shot Up: This denotes if the one shot up feature for the driver window is enabled or not.
One Shot Down:This denotes if one shot down feature for the driver window is enabled or not.
Wheels: This denotes if the vehicle is fitted with 18 inch alloys or not.
Air Condition: This denotes the type of the air condition that is fitted in the vehicle: ATC (Automatic Temperature Control) air condition, Manual Air condition, Heater, Parking Heater.
Rear Pretensioner: This denotes if rear pretensionerare fitted in the vehicle.
Head Airbag: This denotes if head airbags are fitted or not.
Side Airbags: This denotes if side airbags are fitted or not.
Memory Driver Seat: This denotes if memory seat is fitted or not.
Electric Sunroof: This denotes if electric sunroof is fitted or not.
Battery Alarm: This denotes is the alarm has a backup battery or not.
Lamp Wash: This denotes if lamp wash is fitted or not.
Fuel: This is the fuel type used in the vehicle, ethanol, diesel, petrol leaded and unleaded.
Ambient 50: This denotes if ambient 50 is fitted or not.
Post Cat Oxygen Sensor: This denotes if post cat oxygen sensor is fitted or not.
ECD2:This denotes if the vehicle complies to European Commission Directive legislation 2002 for emission or not.
Telephone: This denotes if a telephone is fitted or not.
Anti Trap: This denotes if anti trap is fitted or not.
Front Fog Warning: This denotes if front fogs warning are used for warning or not.
Electric Windows: This denotes if the vehicle is fitted with both front and rear electric windows or only with front electric windows.

There are 18 groups under the SA section which has been discovered from screenshots from other forums, and also confirmed from an un-named party! ;)

The SA string is 16 characters long and in a hexadecimal format. Once an option is changed it alters a specific character of the string and gives a new string telling the car the option is either disabled or enabled. The information Keith posted on the make up of this string is shown in the groups above and used to give the 16 characters. The only things I’m not sure about is the phone option? It’s missing from the picture... Also the bottom 3 groups are two singles and a double, making 18 groups not 16 so these presumably are combined.

TV Module: This denotes if TV module is fitted or not.
Tourer: This denotes if the vehicle is Tourer or not.
European Emission Legislation: This denotes if the vehicle complies to European Commission Directive legislation 2003 for emission or not.
Transit: This denotes the vehicle is in transport mode or not.

Changing any of these four options changes the first character in the string. How you calculate this character was the next stumbling block. A few past posts have mentioned binary so converting the hexadecimal to binary shows a lot of 1’s and 0’s, which is not really that helpful when searching for a pattern. However, convert to decimal and it becomes clear. Taking the first character of the SA string and then marking off the four options the car in question has, do for several cars and look for the common theme...

Example (using a lot of info from Duncan (lowedb))...

Hex = E, Decimal = 14, Options = TV, Tourer, EEL
Hex = 6, Decimal = 6, Options = Tourer, EEL
Hex = 0, Decimal = 0, Options = none
Hex = 2, Decimal = 2, Options = EEL
Hex = A, Decimal = 10, Options = TV, EEL

Notice that the difference between (TV, Tourer, EEL) and (Tourer, EEL) is 8, just EEL is 2, and (TV, EEL) is 10.

Also notice that if we subtract 2 from the (Tourer, EEL) so 6-2 = 4, assume that Tourer = 4, look at the first and last examples there is a difference of 4 and a difference of a tourer option.

We can assume that each option takes a decimal value of, TV = 8, Tourer = 4, TV = 2 and Transit = ?, Nothing = 0. Messing around on my car we can actually take transit = 1 which incidentally has a nice binary reference.... 1, 2, 4, 8

8 - TV Module
4 - Tourer
2 - European Emission Legislation
1 - Transit

Sum the answer and convert to Hex using Microsoft Excel and the Analysis Toolpak which can be installed from the CD if not already installed. Using =DEC2HEX it converts the value to a hexadecimal value and we get the first number of our data string. Now seeing as there are 16 groups each with 4 options you have to assume they're all the same method of working!

We have 16 characters so need 16 groups of options, using the information provided again by Duncan, Keith and "borrowed picture", assuming the correct order, as I’ve not had it confirmed, maybe xpart can confirm this?? These are comprised as the following...

TV Module
Transit Mode

Self Levelling
No Alarm or US
Alarm with US
Alarm No US

Ron 95
Ron 90
Rain Sensor
Federal Emissions

Pencil Coils
PDC KMC Sounder
Rear Wash Wipe

Daytime Running Lamps
Head Lamp Delay
Xenon Head Lamps
MY 2004

Cruise Control
Traction Control
X12 ATCC Diag
Engine Fan Speed

One Shot Up
One Shot Down
Rain Sensor G2
PDC 4 Sensors

Long Wheel Base
Distance KM
SA 7 - 2
18 Inch Alloys

ATC Aircon
Manual Aircon
Parking Heater

SA 9 - 8
No Rear Pretensioner
Airbag Curtain
Side Airbags

SA A - 8
Mem Drivers Seat
SA A - 2
SA A -1

Electric Sunroof
Remote Boot Release
Remote Glass Release
Battery Backed Alarm

Lamp Wash
LPG (Liquified Petroleum Gas)
Ron 92

Ethanol 22 PC
Diesel Fuel
Unleaded Fuel
Leaded Fuel

Ambient 50
Post Cat Oxy Sensor
ACU C 10

Anti Trap
Front Fog Warning
F/R Electric Windows
Front Electric Windows

Assign the numbers 8, 4, 2,1 respectively to each group starting with 8 at the top of the group down to 1 at the bottom and we have our SA code. To actually change the code on the car we need the checksum digit. Compile the whole lot to Excel and it will generate the SA string on the options you provide. With a bit of help from an Excel help forum I have managed to reverse it and compile the options on the car from the SA string. Checking it against Lovel’s screen shots give pleasing results, which does suggest the options are in the right order! However I think at least 40-50, maybe more sets of data should be pushed through, and even then used with caution. I will provide the excel sheet to anyone who is a subscribed member, so pay your subs before asking for it! Enough information is here to compile your own though. My Excel sheet is locked, but without password for easy unlocking. I’ve done it to stop accident changes to cells, causing errors. However, please unlock, improve it, send me back a copy if you can. :lol:

Remember the usual disclaimer rules apply, I am definitely not held responsible for any use of this at all. Remember one wrong digit and you are royally stuffed!!!

Please post up information especially regarding errors, and please submit anything useful for working out the GM and VN codes.

I thought I had the GM on the right tracks but with some information provided by xpart im a bit dubious at the moment. So I’m going to go back and look at some more information. The next two posts are spare for me to edit so we can keep it all together in uniform. Please don’t delete them mods.

The 135ps xpower map is being investigated, so if you have your unlock code and dont mind sharing it along with your VIN (Vehicle Identification Number), please forward them on to me. Any information is held in the strictest of confidence and will be deleted if you ask, or when I discover how to calculate them.

IPK (Instrument pack (IPK from the German)) is still being investigated as well...

Posted 25 May 2010, 08:44 #1 

Last edited by Mad-Monkey on 25 May 2010, 08:57, edited 1 time in total.

GM String

Quoted from Keith's working's again...

GM Code: This is a unique code that identifies the configuration of the vehicle. It is stored in several ECUs within the vehicle and allows the manufacturer to uniquely identify each and every possible option for the vehicle. It is used in conjunction with the SA and VN codes. The number is stored in the instrument pack ECU (Engine Control Unit) and in the EWS (Engine immobiliser (EWS from the German, Elektronik WegfahrSicherung)) 3D ECU and can be read in their settings pages. The code is 8 digits long. The firsts digit of the code has to be 7. Valid values for he other 7 digits are: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E and F.

The first number is always 7 and the fifth number is always 0. The groupings are as follows;

V8 Engine
M47R Engine
K Petrol Engine
KV6 Engine

4.6 Litre
2.5 Litre
2.0 Litre
1.8 Litre


Asia Pacific


GM 7 - 8
GM 7 - 7
English US
English UK

Apart from the Rover, MG, RHD, LHD group the assignment of number is quite simple. Duncan (lowedb) suggested the theory of each group being assigned numbers 1, 2, 3 etc... to the end of the group. The bottom of each group starts as one and then increases by +1 as you ascend the group, i.e.

4 V8 Engine
3 M47R Engine
2 K Petrol Engine
1 KV6 Engine

There is only one possible option for each group so there is no need for calculations as used in the SA string where multiple options can be selected. You either have a V8, Diesel, K series engine or KV6, you can't have multiple selections on the one car.

The third group (4th character of the GM string) however can have multiple options. Therefore takes the values and calculations the same as the SA string.

8 Rover
4 MG

Using the formula in Excel as used previously give the 4th character. The only letter that could be present in this box is "A" which is Rover RHD as confirmed by xpart. The other values this character could be would all be numerical.

The final groups are calculated as the first using values assigned 1, 2, 3... for the whole group.

Once all calculated and you have 7 as the first, 0 as the fifth, you have a completed GM string.

Posted 25 May 2010, 08:44 #2 

Last edited by Mad-Monkey on 25 May 2010, 08:56, edited 1 time in total.

VN Edit

Posted 25 May 2010, 08:44 #3 

Hi,good luck with your work in cracking the codes.Would be interested in the 135xpower upgrade.

Posted 25 May 2010, 23:48 #4