Na webu ocko.uzis.cz už běží funkční Očkovací portál občana. Zájemci si zde mohou vygenerovat mezinárodní očkovací certifikát, který bude platný v EU. Ministerstvo zdravotnictví zároveň odesílá očkovaným ještě druhý očkovací certifikát na e-mail ve formě šifrované přílohy ZIP, přičemž heslo dorazí v SMS.
V obou certifikátech je QR kód a v tom českém i čárový. Zatímco QR kód v českém očkovacím certifikátu obsahuje standardní webovou adresu, která vede bez potřeby autentizace přímo na vaši webovou kartu očkovaného se všemi myslitelnými detaily, jednodušší evropský certifikát obsahuje hutně zakódovaný text.



Český certifikát, který ministerstvo zdravotnictví rozesílá v zašifrované poštovní příloze, a ten evropský, který stáhnete z webu ocko.uzis.cz
Je tedy zjevné, že k jeho přečtení se bude používat dedikovaná aplikace nebo čtečka – třeba kdesi na letní dovolené, když vás na hranicích nebo až na místě bude kontrolovat hlídka.

Obsah evropského QR kódu představuje změť alfanumerických znaků uvozených identifikátorem HC1 (Health Certificate Version 1)
Jak rozluštit obsah QR v Pythonu
Geekové si nicméně mohou QR rozluštit i svépomocí. Jedná se totiž zakódovaná binární data metodou Base45, dále algoritmem Zlib a nakonec je vše ještě serializované technikou CBOR. Pokud se všemi těmito vrstvami prokoušete, získáte už dobře čitelnou strukturu ve formátu JSON.
Pokud se nebojíte Pythonu, spusťte v něm tento maximálně zjednodušený kód:
import zlib, base45, cbor, pprint
print("Zkopíruj obsah QR kódu: ", end="")
pprint.pprint(cbor.loads(cbor.loads(zlib.decompress(base45.b45decode(input()[4:]))).value[2]))
Pozor, je třeba doinstalovat všechny potřebné balíčky. Především exotičtější base45 a cbor:
pip3 install base45 cbor
Nebo
pip install base45 cbor
Podle konfigurace vašeho systému a Pythonu.
Po spuštění vás stručný skript požádá, abyste do vstupu zkopírovali surový obsah z QR kódu, který jste přečetli v libovolné čtečce. Z těch webových třeba v Zxing.org.

Spuštění kódu výše v Pythonu3
JSON struktura obsahuje položky, které najdete i na evropském certifikátu. Z těch snadno identifikovatelných:
- dob: datum narození
- fn: příjmení s diakritikou
- fnt: příjmení bez diakritiky
- gn: jméno s diakritikou
- gnt: jméno bez diakritiky
- ci: identifikátor
- co: zkratka země (CZ)
- dn: pořadové číslo dávky
- dt: datum očkování
- is: vydavatel (ministerstvo zdravotnictví)
- mp: evropská registrace očkovací látky:
- EU/1/20/1528 = Comirnaty
- EU/1/20/1507 = Moderna
- EU/1/21/1529 = AstraZeneca
- EU/1/20/1525 = Janssen
- sd: počet dávek
- tg: kód nemoci/agensu (840539006)
- vp: kód vakcíny (Comirnaty má 1119349007)
Na konci struktury je ještě časový údaj roční platnosti a vygenerování QR kódu ve formátu Unix timestamp, tedy jako počet sekund od unixové epochy. Jsou to ta dvě čísla začínající 16:
1: 'CZ',
4: 1654032850,
6: 1622496850}
Pro ověření je můžete zkopírovat třeba do formuláře na webu unixtimestamp.com a převést na srozumitelné datum a čas.
O dalších technických detailech se na Twitteru a v češtině rozepsal třeba Radek Zajíc: