Skip to content
Security Tool

QR Checksum Generator

Generate a real SHA-256 checksum for any QR payload with your browser's built-in cryptography, so a recipient can verify that a printed code has not been altered. Also verify a payload against a checksum someone sent you.

1. Generate a checksum

Example: https://example.com/ticket/REF-99104

2. Verify a payload against a checksum

The code itself

Enter a payload to see its QR code.

The checksum is deliberately not embedded in this QR code. Print the checksum separately — on the letter, label, or page that accompanies the code — so the recipient can compare two independent sources.

Using checksums to prove a printed QR code was not altered

A printed QR code has a simple vulnerability: anyone who can reprint it can change it. A checksum closes that gap for the recipient. The sender hashes the exact payload with SHA-256 and shares the checksum through a separate channel — a letter, an email, a second label. The recipient decodes the printed code, hashes what they decoded, and compares. If the two checksums match, the payload is byte-for-byte identical to what the sender hashed. If a single character differs — a swapped digit, a changed letter, an extra space — the checksum changes completely, and the mismatch is obvious.

The separate channel is the whole point, and it is where checksum schemes usually fail. A checksum printed on the same label as the code, or embedded inside the payload itself, proves nothing: an attacker who replaces the code can replace the checksum alongside it. The checksum must travel independently of the code it protects. For a mailed ticket, the checksum goes in the letter while the code goes on the ticket. For a posted notice, the checksum lives on a page the owner controls while the code hangs on the wall. Two channels, one comparison.

Exactness matters. A hash is computed over bytes, not over the general idea of the text. Trailing spaces, line breaks, capitalisation, and non-ASCII characters all change the result. That is why verification notes should reproduce the payload exactly, and why the recipient should hash the decoded text rather than retyping it from memory. Retyping invites transcription errors that produce a mismatch on a genuine code — and a verification system that cries wolf will soon be ignored.

Know what a checksum does not prove. It proves integrity, not authorship. A matching checksum says the payload was not altered since it was hashed; it says nothing about who hashed it. If you need to prove who created the payload, you need a digital signature, where a private key signs the hash and anyone can verify it with the public key. Checksums answer "was this changed?"; signatures answer "who wrote this?". Use the tool that matches the question.

In practice, checksums shine in low-volume, high-trust workflows: tickets, certificates, inspection labels, and handover documents where a recipient has reason to check. Keep the workflow light — full checksum in the accompanying note, short checksum in print where space is tight, and a verification step that takes seconds. A check nobody performs is decoration; a check that takes seconds gets done.

Frequently Asked Questions About QR Checksums

What does a SHA-256 checksum prove?

It proves the text you received is byte-for-byte identical to the text that was hashed. If even one character changes, the checksum changes completely. It does not prove who wrote the text — for authorship you need a digital signature, not a checksum.

Why is the checksum shown in two forms?

The full 64-character hex checksum is the authoritative value for verification. The short 12-character form is for printing beside a code, where a full checksum would make the code denser or the label crowded. Verify against the full value whenever you can; the short form only catches casual errors.

Should the checksum live inside the QR payload or beside it?

Beside it, in readable print. A checksum inside the payload cannot detect tampering with the code itself, because an attacker who replaces the code would replace the embedded checksum too. A checksum printed separately — on a letter, a label, or a second channel — lets the recipient compare two independent sources.

Is SHA-256 still safe to use?

Yes for integrity checking. SHA-256 is a widely used, standard hash function with no practical preimage attack. The realistic risks are procedural: sending the checksum through the same channel as the payload, or comparing only part of it. Send the checksum separately and compare the full value.