Skip to content
Measured, not claimed

99.94% of Aadhaar numbers, 100% of QR codes, on 10,001 real loan files

This page is the whole story: what was tested, how it was counted, what the figures are, and what the engine still misses. As of October 2026 no other Aadhaar masking vendor publishes a measured figure, and none claims more than 99.9%.

Last updated

of Aadhaar numbers masked
99.94%
13,541 of 13,549 Aadhaar numbers on 10,001 real loan files, counted by an independent reader and checked by eye.
of Aadhaar QR codes masked
100%
2,498 of 2,498 Aadhaar QR codes in the same test.
pages a minute
500
About 500 pages a minute with 40 parallel masking environments; 425 pages a minute measured end to end through the API with 24 files in flight from one office connection.
service errors
0
0 errors and 0 throttles in 11,128 masking calls during the test (CloudWatch).

Measured on 10,001 real loan files, 15 October 2026; method on the Accuracy page. The misses are listed too: how it was measured.

The set

Loan files as customers upload them

10,001 files from loan cases, taken as they were uploaded by customers of a housing-finance lender: card photos from phones, scans, e-Aadhaar printouts, multi-page PDFs of KYC sets and deeds, ZIP archives and spreadsheets. 18,893 pages in all. Nothing was selected or cleaned up.

Every file was sent to the hosted API on 15 October 2026 exactly as a customer would send it, 24 files in flight at a time from one office connection. 9,946 files came back masked; 55 were refused with a message saying why: unsupported formats such as .xlsb, .htm and .docx, password-protected PDFs, an empty ZIP and an unfinished browser download.

The documents are the lender's and the holders'. None appears on this site, and every figure here is a count.

Files sent
10,001
Pages
18,893
Files masked
9,946
Refused by design
55
Aadhaar numbers found by the reader
13,549
Aadhaar QR codes found by the reader
2,498
Masking calls
11,128
Errors · throttles
0 · 0
Wall-clock time
44.5 minutes
The method

An independent reader, and a person for every flag

An independent reader

A separate text and QR reader, not part of the product, read every page of every input and every output. An Aadhaar number is twelve digits starting 2–9 that pass the Verhoeff checksum, printed 4-4-4 or beside Aadhaar wording. A QR code counts when its contents are Aadhaar's. A number or code is masked when it can no longer be read on the same page of the output.

Eyes on every flag

Every number or code the reader said was still readable was looked at by a person. Reader mistakes were removed from the count: PAN numbers in handwriting, years, phone and account numbers that happened to look like twelve digits.

Wrong covers, two ways

A cover on something that is not an Aadhaar number hides information a reviewer needs. Pages were reviewed one by one for covers on anything else, and a random 35 of the 323 pages where the engine covered something the reader could not read were checked by eye: 33 were real Aadhaar numbers or codes the reader had missed, 2 were PAN QR codes on e-PAN pages, covered by policy because they share UIDAI's format.

UIDAI's rule is followed: the last four digits stay readable on 13,432 of the masked numbers. Where the engine cannot place the cut exactly, the whole number is covered rather than risk a digit showing. Virtual IDs are left as printed, by decision: 4,043 were seen.

What it still misses

8 numbers of 13,549

Every one checked by eye. Six are card photos the detector does not find, which is the next training round; two are numbers in Hindi deeds.

WhatKindNumbersStatus
A card inside a collage of several documentsCard photo1Needs detector training
An old card where a cover was drawn beside the numberCard photo1Needs detector training
A card photographed sideways, the number at its edgeCard photo1Needs detector training
A clear card in a plastic sleeve the detector did not findCard photo1Needs detector training
A blurred photo of a card's backCard photo1Needs detector training
A small, faint card in a large photoCard photo1Needs detector training
A number read a digit short, its label garbledHindi deed1A re-read finds it but nothing labels it
A number on a phone photo of a deed the page read finds no line onHindi deed1Open
Every release

Tested the same way before it ships

Labelled sets in the build

Six labelled sets of real and synthetic documents, 231 files, run on every change: each labelled number must be covered and each labelled name, date and amount must be left alone. A change that fails a set does not merge. A release is also run side by side with the one before it on the files that changed, and every moved cover is looked at.

Try it yourself

The quickest check is your own file: a card photo from a field app, a page of a deed, a form with the number written in. You see the masked copy and the per-page record, and the file is deleted within 24 hours.

Try it with your own file
Get started

See it on your documents

Thirty minutes with an engineer: your document types, your volumes, and the edition that fits where your documents may go.

Or email support@habilelabs.io · Monday to Friday, 10:00–19:00 IST (excluding public holidays)