KDE PIM/KItinerary/Trenitalia Barcode

From KDE Community Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

General Observations

  • always 67 bytes
  • exactly for one passenger/leg
  • does not seem to contain signatures, checksums or compression, based on minimal bit pattern changes on adjacent tickets
  • a lot less null bytes when PNR/seat reservation are present (ie. highspeed train tickets?)
  • there is a unique, globally sequential ticket number, 2017 in the 600M range, 2019 in the 1B range, which suggests 32bit might be a bit short for this

Bit Layout

Byte:Bit (MSB) Content Meaning Notes
0:0 - 4:7 0x20 0x14 0xC2 0x08 0x10 header? fixed value in all samples, contains the Trenitalia UIC code ("83")
5:0 - 7:7 date? varies between samples
8:0 - 13:4 null
13:5 - 14:3 100 xxxx 0000 for Italian stations codes (UIC 83.....), 0111 for international destination?
14:4 - 17:3 24 bit uint UIC station code of departure only for Italian destinations apparently
17:4 - 18:2 100 xxxx see above
18:3 - 21:2 24 bit uint UIC station code of arrival see above
21:3 - 22:1 unknown 22:1 seems 0 in all samples, the rest varies
22:2 - 24:1 16 bit uint train number could be as little as 14 bits too, no train number > 16k has been observed
24:3 - 29:7 null
30:0 - 31:1 null if no PNR present, content unknown
31:2 - 32:0 7 bit uint seat number seat row for trains with an airplane-like numbering scheme
32:1 - 32:2 null
32:3 - 32:6 4 bit uint seat column as hex number 0 for trains without an airplane-like numbering scheme
32:7 - 33:6 null?
33:6 - 38:2 6x6 bit as listed below PNR all null if ticket has no PNR, values map to digits/letters as follows: 0-9 -> 0-9, 10-35 -> A-Z
38:3 -43:3 null
43:4 - 44:2 1010 011 or null issuer or carrier UIC code only set if PNR is present, "83" for Trenitalia tickets otherwise, a few preceding bits are likely part of this fields as well
44:3 -45:7 null
46:0 - 48:7 unknown null if no PNR present, unknown content otherwise
49:0 - 49:7 null
50:0 - 50:7 unknown null if no PNR present, unknown content otherwise
51:0 - 57:7 0x0B 0x65 0x23 0x18 0x40 0xE6 0xC0 fixed in all samples?
58:0 - 58:3 null might be part of the ticket number?
58:4 - 62:3 32 bit uint ticket number
63:4 - 65:7 null
66:0 - 66:7 varies between samples, same as 6:4 - 7:3?

Open Questions

  • there is one sample where the departure and arrival UIC station codes are equal, contrary to what's in the corresponding PDF
  • for international destinations the station code does not actually seem to be a valid UIC station code, but there is only one sample to back this up so far
  • It seems plausible that the coach number is also encoded given the seat number is, 30:0 - 31:1 would seem like the obvious range. In the sample data this does not seem the case with any obvious encoding.
  • Is the train type derived from the train number, or is that also encoded? 21:3 -22:1 would seem to be the obvious range for that, but so far no correlation to current samples found.
  • Is the class encoded somewhere?
  • Date/time encoding is still a mystery.
  • Is the PNR encoded? 46-50 seems like a plausible range for that. 36^5 possible values, ie. needs >= 26 bit.
  • What is the "CP Code" in the PDF, and is that encoded somewhere? -> unlikely based on comparing adjacent codes