ginibooster ginibooster
· Profile

What this service does

Bank Statement Parser extracts transactions from Czech bank statement PDFs and returns structured JSON. Upload a PDF — the service identifies the bank, parses all transactions, verifies the PDF's embedded digital signature (if present), and delivers clean, machine-readable data.

How it works

1
Upload — drag & drop or click to select a PDF bank statement.
2
Classify — the service checks that the document is a Czech bank statement (keyword scoring across the first two pages).
3
Detect bank — the bank is identified by its unique PDF signature (header text, labels, formatting).
4
Parse — a bank-specific parser extracts account info, statement metadata, and every transaction.
5
Verify signature — the embedded PDF signature is extracted, its cryptographic integrity is checked, and the signer's identity is matched against the detected bank. The result is reported as a verdict: valid, valid_untrusted, tampered, signer_mismatch, or unsigned.
6
Return JSON — the result is displayed in the browser and available for download.

Dates are returned as ISO strings YYYY-MM-DD. Amounts are floats — debits are negative, credits are positive. Unparsed fields are null.

Signature verification — every parse result carries a signature object. A valid verdict means the PDF has not been altered since the bank signed it and the signer's identity matches the bank we detected from the content. Some Czech banks (Air Bank, ČSOB, mBank, UniCredit, Partners Banka) do not digitally sign their statements, so unsigned is normal there.

Supported banks

Komerční banka
/0100
MONETA Money Bank
/0600
Air Bank
/3030
ČSOB
/0300
mBank S.A.
/6210
Raiffeisenbank
/5500
Fio banka
/2010
UniCredit Bank
/2700
Česká spořitelna
/0800
Partners Banka
/6363

JSON structure

{
  "bank": "KB",
  "account": {
    "number":   "123456789/0100",
    "iban":     "CZ1201000001234567890",
    "bic":      "KOMBCZPP",
    "owner":    "Jan Novák",
    "currency": "CZK",
    "type":     "Osobní účet"
  },
  "statement": {
    "number":          "12",
    "period_from":     "2024-01-01",
    "period_to":       "2024-01-31",
    "date_issued":     "2024-02-01",
    "opening_balance": 10000.00,
    "closing_balance": 8500.50,
    "total_credited":  5000.00,
    "total_debited":   -6499.50
  },
  "transactions": [
    {
      "date_posted":         "2024-01-05",
      "date_valuta":         "2024-01-05",
      "amount":              -350.00,
      "currency":            "CZK",
      "type":                "Platba kartou",
      "description":         "Albert supermarket Praha",
      "counterparty_account": null,
      "counterparty_name":   "ALBERT ČR",
      "vs":                  null,
      "ks":                  null,
      "ss":                  null,
      "fee":                 null,
      "transaction_id":      "TXN20240105001",
      "balance_after":       9650.00,
      "raw_line":            null
    }
  ],
  "signature": {
    "present":             true,
    "verdict":             "valid",
    "intact":              true,
    "coverage":            "entire_file",
    "bank_match":          true,
    "trusted":             true,
    "trust_error":         null,
    "signer": {
      "subject_cn":          "Elektronická pečeť Komerční banky, a.s.",
      "organization":        "Komerční banka, a.s.",
      "ntrcz_id":            "NTRCZ-45317054",
      "country":             "CZ",
      "issuer_cn":           "Komerční banka Qualified CA/RSA",
      "issuer_organization": "Komerční banka, a.s."
    },
    "signed_at":           "2024-02-01T10:42:13+01:00",
    "timestamp_attested":  false,
    "subfilter":           "adbe.pkcs7.detached",
    "hash_algorithm":      "sha256",
    "warnings":            []
  }
}

Top-level fields

bank
string
Bank identifier: KB, MONETA, AIRBANK, CSOB, MBANK, RAIFFEISENBANK, FIO, UNICREDIT, SPORITELNA, PARTNERS_BANKA
account
object
Account metadata
statement
object
Statement-level summary
transactions
array
List of all transactions on the statement
signature
object
PDF digital signature verification result

account

number
string|null
Account number in Czech format, e.g. 123456789/0100
iban
string|null
International Bank Account Number (IBAN)
bic
string|null
Bank Identifier Code (BIC / SWIFT)
owner
string|null
Account holder name
currency
string
Account currency, typically CZK
type
string|null
Account type as printed on the statement (e.g. Osobní účet)

statement

number
string|null
Statement serial number
period_from
string|null
Start of statement period (YYYY-MM-DD)
period_to
string|null
End of statement period (YYYY-MM-DD)
date_issued
string|null
Date the statement was issued (YYYY-MM-DD)
opening_balance
float|null
Account balance at the start of the period
closing_balance
float|null
Account balance at the end of the period
total_credited
float|null
Sum of all incoming amounts (positive)
total_debited
float|null
Sum of all outgoing amounts (negative)

transactions[ ]

date_posted
string|null
Booking date — when the transaction hit the account (YYYY-MM-DD)
date_valuta
string|null
Value date — when the amount takes effect for interest calculation (YYYY-MM-DD)
amount
float|null
Transaction amount. Negative = debit (outgoing), positive = credit (incoming)
currency
string
Transaction currency (usually CZK)
type
string|null
Transaction type as printed (e.g. Platba kartou, Příchozí úhrada, Výběr z bankomatu)
description
string|null
Payment message / merchant name / note for the recipient
counterparty_account
string|null
Counterparty account number, e.g. 987654321/0300
counterparty_name
string|null
Name of the counterparty (sender or recipient)
vs
string|null
Variable symbol (variabilní symbol) — used for payment matching in CZ
ks
string|null
Constant symbol (konstantní symbol) — identifies payment nature
ss
string|null
Specific symbol (specifický symbol) — additional reference set by payer
fee
float|null
Transaction fee (populated by Air Bank only; null for all other banks)
transaction_id
string|null
Bank's internal transaction identifier
balance_after
float|null
Account balance immediately after this transaction
raw_line
string|null
Raw text line from the PDF (used for debugging)

signature

The embedded PDF digital signature is extracted and verified on every parse. The object is always present — when the PDF has no signature the verdict is "unsigned" and every other field is null.

present
boolean
true if a signature is embedded in the PDF
verdict
string
One of valid, valid_untrusted, valid_unknown_bank, signer_mismatch, tampered, unsigned, error
intact
boolean|null
Cryptographic integrity — true means the file's bytes have not been altered since signing
coverage
string|null
entire_file, entire_revision (signed revision plus later annotations — legitimate), or partial (content appended after the signature — red flag)
bank_match
boolean|null
true when the signer's NTRCZ‑IČO / organisation points to the same bank we detected from the PDF content
trusted
boolean|null
true when the certificate chain terminates in a root CA present in our local trust store
trust_error
string|null
Reason why trusted is false (missing root, revoked cert, SHA‑1 legacy hash, …)
signer
object|null
Extracted certificate Subject: subject_cn, organization, ntrcz_id (Czech IČO), country, plus issuer fields
signed_at
string|null
Declared signing time (ISO 8601 with timezone). Cryptographically attested only if timestamp_attested is true.
timestamp_attested
boolean|null
true when the signature includes a verified RFC 3161 timestamp token from a trusted TSA
subfilter
string|null
PDF signature SubFilter: adbe.pkcs7.detached (most banks), adbe.pkcs7.sha1 (FIO legacy), ETSI.CAdES.detached (PAdES)
hash_algorithm
string|null
Digest algorithm — sha256, sha512, or sha1 (legacy, FIO only)
warnings
string[]
Non‑fatal advisories, e.g. legacy_sha1_signature, expected_signed_but_unsigned, signer_bank_mismatch

Which banks sign their statements?

Based on a 500‑file sample of real Czech bank statements:

Always signs
 
KB, Česká spořitelna, Raiffeisenbank, Fio banka
Sometimes signs
 
MONETA Money Bank (~67 % of statements)
Never signs
 
Air Bank, ČSOB, mBank, UniCredit, Partners Banka — unsigned is expected for these banks

Czech ID Parser

Czech ID Parser extracts structured data from photos of Czech identity cards (Občanský průkaz). Upload a photo of the front or back side — the service reads all printed fields and returns clean JSON. Handles rotated images, glare, and both card generations (pre-2012 and 2012-present).

How it works

1
Upload photo — take a photo or scan of the Czech ID card, front or back side. JPEG, PNG and WebP are supported.
2
Preprocess — EXIF orientation is corrected automatically, contrast is boosted, and the image is resized if needed before OCR.
3
On-server OCR extraction — Tesseract and RapidOCR engines run entirely on our own servers. The image is never sent to a third-party AI provider. Field positions are matched with label-anchor heuristics and per-field validators.
4
MRZ validation — for the back side, the MRZ zone is parsed algorithmically with ICAO 9303 checksum verification to cross-validate the OCR-extracted fields.
5
Return JSON — all extracted fields are returned as structured JSON, with null for unreadable fields.

ID JSON — front side

{
  "document_type": "cz_id",
  "side":          "front",
  "front": {
    "document_number": "123456789",
    "surname":         "NOVÁK",
    "given_names":     "JAN",
    "date_of_birth":   "01.01.1990",
    "sex":             "M",
    "place_of_birth":  "Praha",
    "nationality":     "ČESKÁ",
    "date_of_issue":   "15.03.2020",
    "date_of_expiry":  "15.03.2030",
    "technical_number": "900101"
  },
  "back": null
}

front fields

document_number
string|null
9-character document number (ČÍSLO DOKLADU)
surname
string|null
Surname (PŘÍJMENÍ)
given_names
string|null
All given names (JMÉNO)
date_of_birth
string|null
Date of birth in DD.MM.YYYY format
sex
string|null
"M" or "F"
place_of_birth
string|null
Place of birth (MÍSTO NAROZENÍ)
nationality
string|null
Nationality (STÁTNÍ OBČANSTVÍ)
date_of_issue
string|null
Date of issue DD.MM.YYYY (DATUM VYDÁNÍ)
date_of_expiry
string|null
Expiry date DD.MM.YYYY (PLATNOST DO)
technical_number
string|null
6-digit number near the STÁTNÍ OBČANSTVÍ field — first 6 digits of rodné číslo (YYMMDD), printed for age verification without exposing the full personal number

ID JSON — back side

{
  "document_type": "cz_id",
  "side":          "back",
  "front": null,
  "back": {
    "address":         "Václavské náměstí 1, Praha 1",
    "personal_number": "900101/1234",
    "marital_status":  "svobodný",
    "mrz_line1":       "IDCZE123456789<0<<<<<<<<<<<<<<<",
    "mrz_line2":       "9001011M3003159CZE<<<<<<<<<<<6"
  }
}

back fields

address
string|null
Full residential address — all address lines combined into one string
personal_number
string|null
Full rodné číslo, format YYMMDD/XXXX — filled from MRZ if not printed visibly
marital_status
string|null
Marital status (rodinný stav) if visible, e.g. svobodný / vdaná
mrz_line1
string|null
First MRZ line — exactly 30 characters, starts with IDCZE
mrz_line2
string|null
Second MRZ line — exactly 30 characters, ICAO 9303 TD1 format

MRZ cross-validation: the back side MRZ is parsed algorithmically with ICAO 9303 checksum verification. If personal_number was not read from the printed text, it is extracted directly from the MRZ optional data field and formatted as YYMMDD/XXXX.

Що робить цей сервіс

Bank Statement Parser витягує транзакції з PDF-виписок чеських банків і повертає структурований JSON. Завантажте PDF — сервіс визначить банк, розбере всі транзакції, перевірить вбудований цифровий підпис PDF (якщо він є) та надасть чисті, машиночитабельні дані.

Як це працює

1
Завантаження — перетягніть або натисніть, щоб вибрати PDF-виписку.
2
Класифікація — сервіс перевіряє, чи є документ чеською банківською випискою (пошук ключових слів на перших двох сторінках).
3
Визначення банку — банк ідентифікується за унікальним підписом PDF (заголовок, мітки, форматування).
4
Парсинг — спеціалізований парсер витягує дані рахунку, метадані виписки та кожну транзакцію.
5
Перевірка підпису — вбудований цифровий підпис PDF витягується, перевіряється криптографічна цілісність, а особа підписанта звіряється з визначеним банком. Результат подається вердиктом: valid, valid_untrusted, tampered, signer_mismatch або unsigned.
6
JSON-результат — відображається у браузері.

Дати повертаються у форматі ISO YYYY-MM-DD. Суми — числа з плаваючою точкою: списання від'ємні, зарахування додатні. Незаповнені поля — null.

Перевірка підпису — кожен результат містить об'єкт signature. Вердикт valid означає, що PDF не було змінено з моменту підписання банком і особа підписанта збігається з визначеним банком. Деякі чеські банки (Air Bank, ČSOB, mBank, UniCredit, Partners Banka) не підписують виписки, тому для них unsigned — нормальний стан.

Підтримувані банки

Komerční banka
/0100
MONETA Money Bank
/0600
Air Bank
/3030
ČSOB
/0300
mBank S.A.
/6210
Raiffeisenbank
/5500
Fio banka
/2010
UniCredit Bank
/2700
Česká spořitelna
/0800
Partners Banka
/6363

Структура JSON

{
  "bank": "KB",
  "account": {
    "number":   "123456789/0100",
    "iban":     "CZ1201000001234567890",
    "bic":      "KOMBCZPP",
    "owner":    "Jan Novák",
    "currency": "CZK",
    "type":     "Osobní účet"
  },
  "statement": {
    "number":          "12",
    "period_from":     "2024-01-01",
    "period_to":       "2024-01-31",
    "date_issued":     "2024-02-01",
    "opening_balance": 10000.00,
    "closing_balance": 8500.50,
    "total_credited":  5000.00,
    "total_debited":   -6499.50
  },
  "transactions": [
    {
      "date_posted":         "2024-01-05",
      "date_valuta":         "2024-01-05",
      "amount":              -350.00,
      "currency":            "CZK",
      "type":                "Platba kartou",
      "description":         "Albert supermarket Praha",
      "counterparty_account": null,
      "counterparty_name":   "ALBERT ČR",
      "vs":                  null,
      "ks":                  null,
      "ss":                  null,
      "fee":                 null,
      "transaction_id":      "TXN20240105001",
      "balance_after":       9650.00,
      "raw_line":            null
    }
  ],
  "signature": {
    "present":             true,
    "verdict":             "valid",
    "intact":              true,
    "coverage":            "entire_file",
    "bank_match":          true,
    "trusted":             true,
    "trust_error":         null,
    "signer": {
      "subject_cn":          "Elektronická pečeť Komerční banky, a.s.",
      "organization":        "Komerční banka, a.s.",
      "ntrcz_id":            "NTRCZ-45317054",
      "country":             "CZ",
      "issuer_cn":           "Komerční banka Qualified CA/RSA",
      "issuer_organization": "Komerční banka, a.s."
    },
    "signed_at":           "2024-02-01T10:42:13+01:00",
    "timestamp_attested":  false,
    "subfilter":           "adbe.pkcs7.detached",
    "hash_algorithm":      "sha256",
    "warnings":            []
  }
}

Поля верхнього рівня

bank
string
Ідентифікатор банку: KB, MONETA, AIRBANK, CSOB, MBANK, RAIFFEISENBANK, FIO, UNICREDIT, SPORITELNA, PARTNERS_BANKA
account
object
Метадані рахунку
statement
object
Зведені дані по виписці
transactions
array
Список усіх транзакцій у виписці
signature
object
Результат перевірки цифрового підпису PDF

account

number
string|null
Номер рахунку у чеському форматі, наприклад 123456789/0100
iban
string|null
Міжнародний номер банківського рахунку (IBAN)
bic
string|null
Ідентифікаційний код банку (BIC / SWIFT)
owner
string|null
Ім'я власника рахунку
currency
string
Валюта рахунку, зазвичай CZK
type
string|null
Тип рахунку з виписки (наприклад, Osobní účet)

statement

number
string|null
Порядковий номер виписки
period_from
string|null
Початок periodу виписки (YYYY-MM-DD)
period_to
string|null
Кінець periodу виписки (YYYY-MM-DD)
date_issued
string|null
Дата формування виписки (YYYY-MM-DD)
opening_balance
float|null
Залишок на рахунку на початку periodу
closing_balance
float|null
Залишок на рахунку в кінці periodу
total_credited
float|null
Сума всіх зарахувань (позитивне число)
total_debited
float|null
Сума всіх списань (від'ємне число)

transactions[ ]

date_posted
string|null
Дата проведення — коли транзакція потрапила на рахунок (YYYY-MM-DD)
date_valuta
string|null
Дата валютування — дата нарахування відсотків (YYYY-MM-DD)
amount
float|null
Сума. Від'ємна — списання, додатня — зарахування
currency
string
Валюта транзакції (зазвичай CZK)
type
string|null
Тип транзакції з виписки (наприклад, Platba kartou, Příchozí úhrada)
description
string|null
Повідомлення платежу / назва магазину / примітка
counterparty_account
string|null
Номер рахунку контрагента, наприклад 987654321/0300
counterparty_name
string|null
Ім'я контрагента (відправник або отримувач)
vs
string|null
Variabilní symbol — змінний символ для ідентифікації платежу
ks
string|null
Konstantní symbol — постійний символ, визначає характер платежу
ss
string|null
Specifický symbol — специфічний символ, задається платником
fee
float|null
Комісія за транзакцію (тільки Air Bank; у інших банків null)
transaction_id
string|null
Внутрішній ідентифікатор транзакції банку
balance_after
float|null
Залишок на рахунку після цієї транзакції
raw_line
string|null
Необроблений рядок з PDF (для діагностики)

signature

Вбудований цифровий підпис PDF перевіряється при кожному парсингу. Об'єкт завжди присутній — коли підпису немає, verdict дорівнює "unsigned", а решта полів — null.

present
boolean
true, якщо у PDF є вбудований підпис
verdict
string
Один з: valid, valid_untrusted, valid_unknown_bank, signer_mismatch, tampered, unsigned, error
intact
boolean|null
Криптографічна цілісність: true — байти файлу не змінювалися з моменту підпису
coverage
string|null
entire_file, entire_revision (підписано одну ревізію + анотації банку — легітимно) або partial (дописано вміст після підпису — червоний прапор)
bank_match
boolean|null
true, коли IČO / назва підписанта збігається з визначеним банком
trusted
boolean|null
true, коли ланцюжок сертифікатів закінчується на кореневому CA з локального trust‑store
trust_error
string|null
Причина, чому trusted=false (відсутній корінь, відкликаний сертифікат, legacy SHA‑1 …)
signer
object|null
Поля Subject сертифіката: subject_cn, organization, ntrcz_id (чеське IČO), country, а також поля видавця
signed_at
string|null
Задекларований час підпису (ISO 8601 з таймзоною). Криптографічно підтверджений, лише якщо timestamp_attested=true.
timestamp_attested
boolean|null
true, якщо підпис містить перевірений RFC 3161 timestamp‑токен
subfilter
string|null
SubFilter PDF‑підпису: adbe.pkcs7.detached (більшість банків), adbe.pkcs7.sha1 (Fio, legacy), ETSI.CAdES.detached (PAdES)
hash_algorithm
string|null
Алгоритм хешу: sha256, sha512 або sha1 (legacy, лише Fio)
warnings
string[]
Попередження, що не є критичними: legacy_sha1_signature, expected_signed_but_unsigned, signer_bank_mismatch

Які банки підписують виписки?

На основі вибірки з 500 реальних PDF‑виписок чеських банків:

Завжди підписують
 
KB, Česká spořitelna, Raiffeisenbank, Fio banka
Іноді підписують
 
MONETA Money Bank (~67 % виписок)
Не підписують
 
Air Bank, ČSOB, mBank, UniCredit, Partners Banka — для них unsigned є нормою

Czech ID Parser

Czech ID Parser витягує структуровані дані з фотографій чеських посвідчень особи (Občanský průkaz). Завантажте фото лицьової або зворотної сторони — сервіс зчитає всі поля і поверне чистий JSON. Підтримує повернуті зображення, відблиски та обидва покоління карток (до 2012 і з 2012 року).

Як це працює

1
Завантаження фото — сфотографуйте або відскануйте чеське посвідчення. Підтримуються JPEG, PNG, WebP.
2
Попередня обробка — EXIF-орієнтація виправляється автоматично, контрастність підсилюється, зображення стискається за потреби перед OCR.
3
OCR на нашому сервері — двигуни Tesseract і RapidOCR працюють виключно на наших серверах. Зображення не передається жодному AI-провайдеру третьої сторони. Позиції полів знаходяться через label-anchor евристику і валідатори.
4
Валідація MRZ — для зворотної сторони зона MRZ парситься алгоритмічно зі стандартом ICAO 9303 для перехресної перевірки полів, отриманих з OCR.
5
Результат JSON — всі поля повертаються у вигляді структурованого JSON, нерозпізнані поля — null.

ID JSON — лицьова сторона

{
  "document_type": "cz_id",
  "side":          "front",
  "front": {
    "document_number": "123456789",
    "surname":         "NOVÁK",
    "given_names":     "JAN",
    "date_of_birth":   "01.01.1990",
    "sex":             "M",
    "place_of_birth":  "Praha",
    "nationality":     "ČESKÁ",
    "date_of_issue":   "15.03.2020",
    "date_of_expiry":  "15.03.2030",
    "personal_number": "900101"
  },
  "back": null
}

Поля лицьової сторони

document_number
string|null
9-символьний номер документа (ČÍSLO DOKLADU)
surname
string|null
Прізвище (PŘÍJMENÍ)
given_names
string|null
Всі імена (JMÉNO)
date_of_birth
string|null
Дата народження у форматі DD.MM.YYYY
sex
string|null
"M" або "F"
place_of_birth
string|null
Місце народження (MÍSTO NAROZENÍ)
nationality
string|null
Громадянство (STÁTNÍ OBČANSTVÍ)
date_of_issue
string|null
Дата видачі DD.MM.YYYY (DATUM VYDÁNÍ)
date_of_expiry
string|null
Дата закінчення DD.MM.YYYY (PLATNOST DO)
personal_number
string|null
Частковий родний номер (rodné číslo), видимий на лицьовій стороні

ID JSON — зворотна сторона

{
  "document_type": "cz_id",
  "side":          "back",
  "front": null,
  "back": {
    "address":         "Václavské náměstí 1, Praha 1",
    "personal_number": "900101/1234",
    "marital_status":  "svobodný",
    "mrz_line1":       "IDCZE123456789<0<<<<<<<<<<<<<<<",
    "mrz_line2":       "9001011M3003159CZE<<<<<<<<<<<6"
  }
}

Поля зворотної сторони

address
string|null
Повна адреса проживання — всі рядки адреси об'єднані в один рядок
personal_number
string|null
Повний родний номер (rodné číslo), формат YYMMDD/XXXX — береться з MRZ якщо не надрукований
marital_status
string|null
Сімейний стан (rodinný stav), якщо вказаний: svobodný / vdaná тощо
mrz_line1
string|null
Перший рядок MRZ — рівно 30 символів, починається з IDCZE
mrz_line2
string|null
Другий рядок MRZ — рівно 30 символів, формат ICAO 9303 TD1

Валідація MRZ: зона MRZ зворотної сторони парситься алгоритмічно із перевіркою контрольних сум ICAO 9303. Якщо personal_number не розпізнано з тексту — він витягується напряму з поля optional data MRZ і форматується як YYMMDD/XXXX.

Co tento servis dělá

Bank Statement Parser extrahuje transakce z PDF výpisů českých bank a vrací strukturovaný JSON. Nahrajte PDF — servis identifikuje banku, rozparsuje všechny transakce, ověří vložený digitální podpis PDF (je‑li přítomen) a vrátí čistá, strojově čitelná data.

Jak to funguje

1
Nahrání — přetáhněte nebo klikněte pro výběr PDF výpisu.
2
Klasifikace — servis ověří, zda jde o výpis české banky (bodování klíčových slov na prvních dvou stránkách).
3
Detekce banky — banka je identifikována podle jedinečného podpisu v PDF (záhlaví, popisky, formátování).
4
Parsování — specializovaný parser extrahuje údaje o účtu, metadata výpisu a každou transakci.
5
Ověření podpisu — vložený digitální podpis PDF je extrahován, ověřuje se kryptografická integrita a totožnost podepisovatele se porovná s detekovanou bankou. Výsledek je reprezentován verdiktem: valid, valid_untrusted, tampered, signer_mismatch nebo unsigned.
6
Výsledek JSON — zobrazí se v prohlížeči.

Data jsou vrácena ve formátu ISO YYYY-MM-DD. Částky jsou desetinná čísla — debety jsou záporné, kredity kladné. Nevyplněná pole mají hodnotu null.

Ověření podpisu — každý výsledek parsování obsahuje objekt signature. Verdikt valid znamená, že PDF nebylo změněno od okamžiku podpisu bankou a totožnost podepisovatele odpovídá bance zjištěné z obsahu. Některé české banky (Air Bank, ČSOB, mBank, UniCredit, Partners Banka) své výpisy digitálně nepodepisují, takže unsigned je u nich běžný stav.

Podporované banky

Komerční banka
/0100
MONETA Money Bank
/0600
Air Bank
/3030
ČSOB
/0300
mBank S.A.
/6210
Raiffeisenbank
/5500
Fio banka
/2010
UniCredit Bank
/2700
Česká spořitelna
/0800
Partners Banka
/6363

Struktura JSON

{
  "bank": "KB",
  "account": {
    "number":   "123456789/0100",
    "iban":     "CZ1201000001234567890",
    "bic":      "KOMBCZPP",
    "owner":    "Jan Novák",
    "currency": "CZK",
    "type":     "Osobní účet"
  },
  "statement": {
    "number":          "12",
    "period_from":     "2024-01-01",
    "period_to":       "2024-01-31",
    "date_issued":     "2024-02-01",
    "opening_balance": 10000.00,
    "closing_balance": 8500.50,
    "total_credited":  5000.00,
    "total_debited":   -6499.50
  },
  "transactions": [
    {
      "date_posted":         "2024-01-05",
      "date_valuta":         "2024-01-05",
      "amount":              -350.00,
      "currency":            "CZK",
      "type":                "Platba kartou",
      "description":         "Albert supermarket Praha",
      "counterparty_account": null,
      "counterparty_name":   "ALBERT ČR",
      "vs":                  null,
      "ks":                  null,
      "ss":                  null,
      "fee":                 null,
      "transaction_id":      "TXN20240105001",
      "balance_after":       9650.00,
      "raw_line":            null
    }
  ],
  "signature": {
    "present":             true,
    "verdict":             "valid",
    "intact":              true,
    "coverage":            "entire_file",
    "bank_match":          true,
    "trusted":             true,
    "trust_error":         null,
    "signer": {
      "subject_cn":          "Elektronická pečeť Komerční banky, a.s.",
      "organization":        "Komerční banka, a.s.",
      "ntrcz_id":            "NTRCZ-45317054",
      "country":             "CZ",
      "issuer_cn":           "Komerční banka Qualified CA/RSA",
      "issuer_organization": "Komerční banka, a.s."
    },
    "signed_at":           "2024-02-01T10:42:13+01:00",
    "timestamp_attested":  false,
    "subfilter":           "adbe.pkcs7.detached",
    "hash_algorithm":      "sha256",
    "warnings":            []
  }
}

Pole nejvyšší úrovně

bank
string
Identifikátor banky: KB, MONETA, AIRBANK, CSOB, MBANK, RAIFFEISENBANK, FIO, UNICREDIT, SPORITELNA, PARTNERS_BANKA
account
object
Metadata účtu
statement
object
Souhrnné údaje výpisu
transactions
array
Seznam všech transakcí ve výpisu
signature
object
Výsledek ověření digitálního podpisu PDF

account

number
string|null
Číslo účtu v českém formátu, např. 123456789/0100
iban
string|null
Mezinárodní číslo bankovního účtu (IBAN)
bic
string|null
Identifikační kód banky (BIC / SWIFT)
owner
string|null
Jméno majitele účtu
currency
string
Měna účtu, zpravidla CZK
type
string|null
Typ účtu z výpisu (např. Osobní účet)

statement

number
string|null
Pořadové číslo výpisu
period_from
string|null
Začátek období výpisu (YYYY-MM-DD)
period_to
string|null
Konec období výpisu (YYYY-MM-DD)
date_issued
string|null
Datum vystavení výpisu (YYYY-MM-DD)
opening_balance
float|null
Zůstatek na účtu na začátku období
closing_balance
float|null
Zůstatek na účtu na konci období
total_credited
float|null
Celková suma přijatých plateb (kladné číslo)
total_debited
float|null
Celková suma odchozích plateb (záporné číslo)

transactions[ ]

date_posted
string|null
Datum zaúčtování — kdy transakce proběhla na účtu (YYYY-MM-DD)
date_valuta
string|null
Datum valuty — rozhodné pro výpočet úroků (YYYY-MM-DD)
amount
float|null
Částka transakce. Záporná = debet (odchozí), kladná = kredit (příchozí)
currency
string
Měna transakce (obvykle CZK)
type
string|null
Typ transakce z výpisu (např. Platba kartou, Příchozí úhrada, Výběr z bankomatu)
description
string|null
Zpráva platby / název obchodníka / poznámka pro příjemce
counterparty_account
string|null
Číslo účtu protistrany, např. 987654321/0300
counterparty_name
string|null
Název protistrany (plátce nebo příjemce)
vs
string|null
Variabilní symbol — pro identifikaci platby
ks
string|null
Konstantní symbol — určuje charakter platby
ss
string|null
Specifický symbol — doplňkový referenční údaj plátce
fee
float|null
Poplatek za transakci (pouze Air Bank; u ostatních bank null)
transaction_id
string|null
Interní identifikátor transakce banky
balance_after
float|null
Zůstatek na účtu ihned po provedení transakce
raw_line
string|null
Surový textový řádek z PDF (pro diagnostiku)

signature

Vložený digitální podpis PDF se ověřuje při každém parsování. Objekt je vždy přítomen — pokud PDF podpis neobsahuje, verdict je "unsigned" a ostatní pole jsou null.

present
boolean
true, pokud PDF obsahuje vložený podpis
verdict
string
Jedna z hodnot: valid, valid_untrusted, valid_unknown_bank, signer_mismatch, tampered, unsigned, error
intact
boolean|null
Kryptografická integrita: true — byty souboru nebyly od podpisu změněny
coverage
string|null
entire_file, entire_revision (podepsaná revize + pozdější anotace banky — legitimní) nebo partial (obsah byl doplněn po podpisu — červený prapor)
bank_match
boolean|null
true, když IČO / organizace podepisovatele odpovídá zjištěné bance
trusted
boolean|null
true, když řetězec certifikátů končí u kořenové CA v lokálním trust store
trust_error
string|null
Důvod, proč je trusted=false (chybějící kořen, odvolaný certifikát, legacy SHA‑1 …)
signer
object|null
Pole Subject certifikátu: subject_cn, organization, ntrcz_id (IČO), country, plus pole vydavatele
signed_at
string|null
Deklarovaný čas podpisu (ISO 8601 s časovou zónou). Kryptograficky prokázaný pouze když timestamp_attested=true.
timestamp_attested
boolean|null
true, pokud podpis obsahuje ověřený RFC 3161 timestamp token
subfilter
string|null
SubFilter PDF podpisu: adbe.pkcs7.detached (většina bank), adbe.pkcs7.sha1 (Fio, legacy), ETSI.CAdES.detached (PAdES)
hash_algorithm
string|null
Hashovací algoritmus: sha256, sha512 nebo sha1 (legacy, pouze Fio)
warnings
string[]
Nekritická upozornění: legacy_sha1_signature, expected_signed_but_unsigned, signer_bank_mismatch

Které banky své výpisy podepisují?

Na základě vzorku 500 reálných PDF výpisů českých bank:

Vždy podepisují
 
KB, Česká spořitelna, Raiffeisenbank, Fio banka
Někdy podepisují
 
MONETA Money Bank (~67 % výpisů)
Nepodepisují
 
Air Bank, ČSOB, mBank, UniCredit, Partners Banka — pro ně je unsigned běžný stav

Czech ID Parser

Czech ID Parser extrahuje strukturovaná data z fotografií českých občanských průkazů. Nahrajte fotografii přední nebo zadní strany — servis přečte všechna pole a vrátí čistý JSON. Podporuje otočené snímky, odlesky a obě generace průkazů (před rokem 2012 a od roku 2012).

Jak to funguje

1
Nahrání fotografie — vyfotografujte nebo naskenujte občanský průkaz. Podporovány jsou formáty JPEG, PNG a WebP.
2
Předzpracování — EXIF orientace se opraví automaticky, kontrast se zvýší a obrázek se v případě potřeby zmenší před OCR.
3
OCR na našem serveru — engine Tesseract a RapidOCR běží výhradně na našich vlastních serverech. Obrázek se nikdy neodesílá žádnému AI poskytovateli třetí strany. Pozice polí se hledají label-anchor heuristikou s vlastními validátory.
4
Validace MRZ — zóna MRZ na zadní straně se parsuje algoritmicky podle standardu ICAO 9303 a křížově ověřuje pole získaná OCR.
5
Výsledek JSON — všechna pole jsou vrácena jako strukturovaný JSON, nečitelná pole mají hodnotu null.

ID JSON — přední strana

{
  "document_type": "cz_id",
  "side":          "front",
  "front": {
    "document_number": "123456789",
    "surname":         "NOVÁK",
    "given_names":     "JAN",
    "date_of_birth":   "01.01.1990",
    "sex":             "M",
    "place_of_birth":  "Praha",
    "nationality":     "ČESKÁ",
    "date_of_issue":   "15.03.2020",
    "date_of_expiry":  "15.03.2030",
    "personal_number": "900101"
  },
  "back": null
}

Pole přední strany

document_number
string|null
9-místné číslo dokladu (ČÍSLO DOKLADU)
surname
string|null
Příjmení (PŘÍJMENÍ)
given_names
string|null
Všechna křestní jména (JMÉNO)
date_of_birth
string|null
Datum narození ve formátu DD.MM.YYYY
sex
string|null
"M" nebo "F"
place_of_birth
string|null
Místo narození
nationality
string|null
Státní občanství
date_of_issue
string|null
Datum vydání DD.MM.YYYY
date_of_expiry
string|null
Platnost do DD.MM.YYYY
personal_number
string|null
Část rodného čísla viditelná na přední straně

ID JSON — zadní strana

{
  "document_type": "cz_id",
  "side":          "back",
  "front": null,
  "back": {
    "address":         "Václavské náměstí 1, Praha 1",
    "personal_number": "900101/1234",
    "marital_status":  "svobodný",
    "mrz_line1":       "IDCZE123456789<0<<<<<<<<<<<<<<<",
    "mrz_line2":       "9001011M3003159CZE<<<<<<<<<<<6"
  }
}

Pole zadní strany

address
string|null
Úplná adresa trvalého pobytu — všechny řádky adresy sloučeny do jednoho řetězce
personal_number
string|null
Rodné číslo ve formátu YYMMDD/XXXX — doplněno z MRZ pokud není vytištěno
marital_status
string|null
Rodinný stav, je-li uveden: svobodný / vdaná apod.
mrz_line1
string|null
První řádek MRZ — přesně 30 znaků, začíná IDCZE
mrz_line2
string|null
Druhý řádek MRZ — přesně 30 znaků, formát ICAO 9303 TD1

Validace MRZ: zóna MRZ zadní strany se parsuje algoritmicky s ověřením kontrolních součtů dle ICAO 9303. Pokud personal_number nebylo přečteno z textu, extrahuje se přímo z optional data pole MRZ a formátuje jako YYMMDD/XXXX.