Jump to content

KDE PIM/KItinerary/ZSSK Barcode: Difference between revisions

From KDE Community Wiki
Vkrause (talk | contribs)
Vkrause (talk | contribs)
Line 29: Line 29:
== Textual Payload Structure ==
== Textual Payload Structure ==


* 34 lines, delimited by 0x0A
* 32-34 lines, delimited by 0x0A
* older versions (?) seem to only have 32 lines and omit line 30 and 32 or 33.
* if there are less than 32 lines, line 30 (and possibly 32 or 33) are omitted.
* UTF-8 encoded
* strings are UTF-8 encoded
* date/time format: 8 digits, the first 4 digits are the days since 2009-01-01, the last four are the time in "hhmm" format. Local time/no timezone.
* date/time format: 8 digits, the first 4 digits are the days since 2009-01-01, the last four are the time in "hhmm" format. Local time/no timezone.
* class information is either provided as "[1|2].tr." ("trieda" is class) or "*" if there is no class.


{| class="wikitable"
{| class="wikitable"
Line 53: Line 54:
| 7 || string || arrival station name ||  
| 7 || string || arrival station name ||  
|-
|-
| 8 || <number>[<digit>.tr.] || train number and class || ("trieda" is class)
| 8 || <number>"["<class>"]" || train number and class ||
|-
|-
| 9 || date/time || departure time ||
| 9 || date/time || departure time ||
Line 71: Line 72:
| 16 || ? || ? || empty in all samples
| 16 || ? || ? || empty in all samples
|-
|-
| 17 || 1-3 digit number || ? ||
| 17 || 1-3 digit number || ? || empty for bicycle addon tickets
|-
|-
| 18 || ? || ? || 0 in all samples
| 18 || ? || ? || 0 in all samples
Line 87: Line 88:
| 24 || string || ticket name/title || e.g. "CESTOVNÝ LÍSTOK"
| 24 || string || ticket name/title || e.g. "CESTOVNÝ LÍSTOK"
|-
|-
| 25 || <string>": "<digit> || tariff name? || e.g. "OBYČAJNÝ" (ordinary) or "KLASIK RP" (discount program), digit is 1 in all samples
| 25 || <string>": "<digit> || tariff name? || e.g. "OBYČAJNÝ" (ordinary) or "KLASIK RP" (discount program), digit is 1 in all samples; both fields can be empty e.g. for bicycle addon tickets
|-
|-
| 26 || string || ticket type? || e.g. "JEDNOSMERNÁ CESTA" (one way)
| 26 || string || ticket type? || e.g. "JEDNOSMERNÁ CESTA" (one way)
Line 97: Line 98:
| 29 || "Do: "<string> || arrival station name ||
| 29 || "Do: "<string> || arrival station name ||
|-
|-
| 30 || "Km: "<number>" NO-"<string>"-"<digit>".tr." || distance?/train type/class || train type is e.g. "R", "REX", "IC"
| 30 || "Km: "<number>" "("NO","ŽTO")"-"<string>"-"<class> || distance?/train type/class || train type is e.g. "R", "REX", "IC"; "NO" seen on tickets for people, "ŽTO" for tickets for bicycles; omitted in tickets with less than 34 lines
|-
|-
| 31 || "Vlak: "<number>["Vozeň: "<number>" Miesto: "<number>] || train/coach/seat numbers || coach/seat numbers are optional
| 31 || "Vlak: "<number>["Vozeň: "<number>" Miesto: "<number>] || train/coach/seat numbers || coach/seat numbers are optional

Revision as of 15:16, 28 June 2022

Domestic Ticket

General Observation

  • Aztec barcode, in PDF or image
  • Variable length
  • For domestic tickets only, international ones use RCT2 in UIC 918.3 container
  • zlib compressed textual payload starting at offset 3.
  • zlib decompressed content is plain text and hardly larger than the full compressed data, which suggests the compressed data doesn't span the full length of the barcode (signature?).

Binary Structure

Offset Format Meaning Notes
0 0x04 ? fixed value
1-2 16 bit BE ? varies with length?
3-4 0x78 0x9C zlib marker
5+ zlib see below
? ? ? high entropy data, signature?
-16 0x00 ? last 16 bytes are always 0x00

Textual Payload Structure

  • 32-34 lines, delimited by 0x0A
  • if there are less than 32 lines, line 30 (and possibly 32 or 33) are omitted.
  • strings are UTF-8 encoded
  • date/time format: 8 digits, the first 4 digits are the days since 2009-01-01, the last four are the time in "hhmm" format. Local time/no timezone.
  • class information is either provided as "[1|2].tr." ("trieda" is class) or "*" if there is no class.
Index Format Meaning Notes
0 "P" fixed value
1 16 digit number ticket number
2 6-8 digit number ?
3 N.NN ticket price in EUR
4 N.NN price? 0.00 in all samples
5 N.NN price? 0.00 in all samples
6 string departure station name
7 string arrival station name
8 <number>"["<class>"]" train number and class
9 date/time departure time
10 date/time end of validity? this is encoded with one day more than printed in the PDF?
11 string passenger name
12 ? ? 0 in all samples
13 ? ? empty in all samples
14 ? ? empty in all samples
15 ? ? empty in all samples
16 ? ? empty in all samples
17 1-3 digit number ? empty for bicycle addon tickets
18 ? ? 0 in all samples
19 date/time ? ?
20 7 digit number discount program membership number
21 7 digit number ? can be empty, possibly related to the discount program?
22 "N" fixed value
23 "text" fixed value
24 string ticket name/title e.g. "CESTOVNÝ LÍSTOK"
25 <string>": "<digit> tariff name? e.g. "OBYČAJNÝ" (ordinary) or "KLASIK RP" (discount program), digit is 1 in all samples; both fields can be empty e.g. for bicycle addon tickets
26 string ticket type? e.g. "JEDNOSMERNÁ CESTA" (one way)
27 ? ? empty in all samples
28 "Z: "<string> departure station name
29 "Do: "<string> arrival station name
30 "Km: "<number>" "("NO","ŽTO")"-"<string>"-"<class> distance?/train type/class train type is e.g. "R", "REX", "IC"; "NO" seen on tickets for people, "ŽTO" for tickets for bicycles; omitted in tickets with less than 34 lines
31 "Vlak: "<number>["Vozeň: "<number>" Miesto: "<number>] train/coach/seat numbers coach/seat numbers are optional
32 ? ? empty in all samples
33 ? ? empty in all samples