Azimut SDK

Why Handwritten Cheque OCR Is the Hardest Problem in Bank Document Processing (And How We Solved It)

Published: 20/05/2026

Most cheque OCR vendors will tell you they support bank cheque processing. What they often mean is they support printed cheque fields: the MICR line at the bottom, printed account numbers, pre-filled amount boxes. Ask them what happens when a customer fills in the amount by hand — in words and figures — and the answer gets more complicated.

Banks still receive millions of handwritten cheques every month. In Pakistan, Kenya, West Africa, and across the Gulf, handwritten cheques are not a legacy edge case. They are mainstream volume. If your cheque processing software only handles printed fields reliably, you are handling a fraction of the problem.

The Azimut SDK processes both. Printed cheques and handwritten cheques. Field extraction accuracy exceeds 97% across both types — at self-service kiosks and at desktop scanners used by tellers and back-office teams.

Why handwritten cheque OCR is genuinely difficult

Printed text is predictable. A thermal printer or laser printer produces characters within a known font, at a known size, with consistent spacing and ink density. OCR on printed text is a solved problem.

Handwriting is not predictable. Consider what varies across even a small sample of handwritten cheques:

The written amount in words. "Five thousand three hundred and fifty" written by one customer looks nothing like the same phrase written by another. Cursive versus print. Word separation. Abbreviations. Regional conventions ("& 50/100" versus "fifty paise" versus "fifty cents"). Ink colour. Pressure.

The numeric amount in figures. Handwritten digits have enormous variation. A handwritten 1 and a handwritten 7 are frequently confused by systems trained predominantly on printed text. A 6 and a 0. An 8 and a 0 closed at the top. These are not rare failure cases — they are common across any real cheque dataset.

The payee name. Cursive signatures and printed names exist on the same line. Payee names in Arabic script, Urdu, French, or Swahili add further complexity for institutions operating across multiple markets.

The date. Day-month-year, month-day-year, written month names, numeric months, two-digit years versus four-digit years. A cheque dated "12/5" in one country means the 12th of May. In another, it means the 5th of December.

When any of these fields fails to extract correctly, one of three things happens: the cheque goes to a manual review queue (adding cost and delay), it clears with an incorrect amount (fraud risk), or it is rejected outright (friction for the customer). None of these outcomes is acceptable at scale.

How the Azimut SDK handles it

The SDK approaches cheque processing as a pipeline, not a single OCR call.

Image capture with UV support. At self-service kiosks, the CDM-embedded cheque scanner captures front and back images. Where the hardware supports it, UV images are captured alongside standard visible-light images. UV capture reveals security features, watermarks, and chemical alterations that are invisible under standard lighting — an important fraud signal before any field extraction begins. The same pipeline works for images from desktop scanners at teller workstations or back-office processing stations.

MICR validation first. Before OCR runs on any handwritten field, the SDK reads and validates the MICR line using E-13B or CMC-7 encoding. The account number, sort code, and cheque serial are extracted and cross-referenced against the cheque number visible in the courtesy amount region. A mismatch here is a hard fraud indicator — the SDK flags it before proceeding.

OCR on printed and handwritten fields. The SDK applies separate extraction models to printed and handwritten content. The payee name, date, written amount (in words), and numeric amount (in figures) are each extracted independently. Confidence scores for each field are returned to the application. Fields below the confidence threshold are surfaced for review rather than silently passed. Over 97% of fields across both printed and handwritten cheques extract correctly on the first pass.

Signature verification. The signature region is extracted from the scanned image and compared against the reference signature held in the bank's system. The SDK returns a match confidence score. Low-confidence matches are routed to an exception queue — not auto-rejected, which would cause legitimate transactions to fail on customers with naturally variable signatures.

Fraud detection. The SDK runs a set of configurable fraud checks: discrepancy between the written amount in words and the numeric amount in figures, UV security feature validation, duplicate cheque detection (the same cheque serial presented more than once), and watchlist screening. Each check returns a discrete pass/fail result. The application decides how to handle each combination of outcomes — reject, route to review, or clear.

Core banking posting. On a clean result, the SDK posts the validated MICR data and extracted fields to the clearing network or core banking API. On any failure, the cheque is flagged and the session does not advance to clearing. The customer is informed and the cheque is returned.

Where this runs in production

Bank Alfalah in Pakistan processes cash and cheque deposits at Digital Branch kiosks using the SDK. The pipeline handles the full range of handwritten cheques presented by retail customers at self-service points.

Bank Al Habib (BAHL), also in Pakistan, runs live production cheque deposits via CDMs with active operational support from the Azimut team. The CDM fleet handles both cash and cheque workflows under the same SDK layer.

Diamond Trust Bank in Kenya uses the SDK for cheque deposit flows at self-service kiosks, with the SDK managing scanning, data extraction, and core banking posting across the East African market.

Banque Atlantique operates across the West African network, processing cash and cheque deposits via CDMs through the same SDK integration.

Across all of these deployments, the cheque OCR pipeline handles regional handwriting conventions, local date formats, and multi-currency written amounts without per-market model retraining.

What this means for a bank evaluating cheque processing software

If you are evaluating a cheque OCR API, the critical question is not "do you support cheque OCR?" Every vendor does. The question is: what is your accuracy on handwritten amounts and payee names, and can I see the data?

A vendor that only quotes accuracy on printed fields is quoting the easy part. A vendor that processes handwritten cheques at 97%+ field accuracy across a mixed real-world dataset is solving the actual problem.

The Azimut SDK also runs the same pipeline regardless of where the cheque arrives — at a self-service kiosk, at a teller workstation, or at a back-office scanning station. Banks do not need to run separate systems for different capture points. One API, one integration, one exception-handling queue.


To see how the pipeline fits into a full cheque deposit workflow — including hardware options, integration touchpoints, and client references — see the Cheque OCR & Fraud Detection use case.

Why Handwritten Cheque OCR Is the Hardest Problem in Bank Document Processing (And How We Solved It) | Azimut SDK