You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
eta 91afbafb7a add spec and README 3 days ago
.idea webshite 3 weeks ago
rsp6-webshite tweak no-specific-seat 1 week ago
src webshite 3 weeks ago
.gitignore webshite 3 weeks ago
Cargo.lock webshite 3 weeks ago
Cargo.toml and more 2 weeks ago
LICENSE webshite 3 weeks ago add spec and README 3 days ago first working version 1 month ago
keys.json general cleanup, json output, no cursed code 1 month ago
rsp6-decoder-rs.iml first working version 1 month ago
spec.ods add spec and README 3 days ago
spec.pdf add spec and README 3 days ago


This is a set of tools to decode UK National Rail electronic ticket barcodes, specifically RSP6 format, as explained in the blog post "Reversing UK mobile rail tickets".

If you're interested in a working demo, check out the hosted version at

What's in this repo?

  • This repo is primarily a Rust crate that can decode these tickets, given a scanned barcode string (starting with 06...). Look at the decode_ticket function for the main entry point.
  • A website that embeds the crate for demo purposes (powering the hosted version) is inside rsp6-webshite/.
    • This will require compiling the main crate for WASM using wasm-pack build --features wasm.
    • If you get errors decoding at runtime, you might need to replace references to wbindgen_realloc in pkg/rsp6_decoder_bg.js with undefined. It's unclear why this happens.
  • spec.pdf has a janky table showing what all the fields in a decoded ticket look like.
    • spec.ods is the janky spreadsheet that was used to make this.
  • keys.json has a copy of all the ticket public keys, as of 2023-01.
    • was a hacky Python script to make these from some binary plist I found at some point. You can ignore it.


This is all MIT. Please go forth and use it to make your own ticket stuff!