KDE PIM/KItinerary/MAV Barcode: Difference between revisions

From KDE Community Wiki
(Created page with "= General Observation = * Uses PDF417 barcode format. * Variable length. * For domestic tickets only. * No similarities with a known ERA format. = Outer Structure = * Two b...")
 
Line 25: Line 25:


{| class="wikitable"
{| class="wikitable"
! Offset !! Size !! Content Type !! Meaning !! Notes
! Offset !! Size !! Data Type !! Meaning !! Notes
|-
|-
| 0 || 17 || string || ticket number || printed as "CIV" on the PDF, numeric
| 0 || 17 || string || ticket number || printed as "CIV" on the PDF, numeric

Revision as of 08:30, 21 August 2021

General Observation

  • Uses PDF417 barcode format.
  • Variable length.
  • For domestic tickets only.
  • No similarities with a known ERA format.

Outer Structure

  • Two byte header, fixed 0x0403.
  • Gzip-compressed payload using deflate compression, starting with the standard Gzip header 0x1f8b0800000000000000.
  • 256 remaining bytes, high entropy and length suggest a cryptographic signature.

Payload Structure

Note: this is based on very few samples so far and thus isn't very reliable yet!

  • Seems byte- rather than bit-aligned.
  • String encoding is UTF-8.
  • Number encoding seems big endian.
  • Variable length, observed between 217 and 274 bytes.
  • Content has a high amount of null bytes.

Layout

Offset Size Data Type Meaning Notes
0 17 string ticket number printed as "CIV" on the PDF, numeric
17 22 ? ?
39 45 string passenger name null terminated
84 4 uint32 passenger birth date year * 10000 + month * 100 + day
88 128 ? ?
216 17 ? ? bytes 216 and following are only present on tickets with seat reservations
233 5 string train number null-terminated
238 2 ? coach number? numeric or string encoding, too few samples to be sure
240 6 numeric seat number? too few samples to be sure
246 28 null ? null bytes in all samples