{
  "id": 16006034,
  "title": "Reverse-engineering the Telebirr receipt QR code",
  "url": "https://urgent.news/2026/10/22/reverse-engineering-the-telebirr-receipt-qr-code",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-22T06:00:51.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/cheki/reverse-engineering-the-telebirr-receipt-qr-code-20m3"
  },
  "original_language": "en",
  "account": "A Telebirr receipt QR code on a phone screen is decoded from base64 to ASCII text of hex characters, which reveals the transaction number hidden within. The QR code follows a TLV (tag, length, value) format, where the transaction number is contained within a larger hex value. The CRC (cyclic redundancy check) value is verified at the end of the payload to ensure its integrity. A Python script was used to decode the QR code and validate the transaction number and CRC, ensuring that it matches the real receipt.",
  "summary": "A customer holds up their phone at a shop counter in Addis. On the screen is a Telebirr receipt, and in the corner is a small square labelled Payment QR Code . The shopkeeper has a queue and a 10-character transaction number to copy by hand. cheki.et is a free, MIT-licensed tool that checks Ethiopian bank and wallet receipts against the bank's own record. We wanted that shopkeeper to be able to…",
  "key_points": [
    "Telebirr receipt QR code decoded from base64 to ASCII hex characters",
    "Transaction number hidden within larger hex value in TLV format",
    "Python script used to decode QR code and validate transaction number and CRC"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}