ForHosting KIT · Developer Utilities

Aadhaar Verhoeff check digit

Get the Verhoeff check digit for the first eleven digits of an Aadhaar number, or check a full twelve-digit one: 2345 6789 012 gets 4, giving 2345 6789 0124. Typos are caught before a form is saved. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Aadhaar
23456789012
Calculation mode
Compute
You get
Input
23456789012
Check digit
4
With check
234567890124
Formatted
2345 6789 0124

Aadhaar is India’s twelve-digit unique identity number. The last digit is a Verhoeff check digit computed over the first eleven digits so that single-digit typos and many adjacent swaps are caught before a form is saved or a batch file is imported. This capability computes that check digit from an eleven-digit body, or validates a full twelve-digit Aadhaar that already includes the check digit, and it reports bad input instead of silently stripping letters or inventing a number. The path is pure arithmetic—no UIDAI network call, no registry lookup, and no claim that a person exists—so homework, KYC pre-checks, and ETL gates can share one deterministic contract.

What the Aadhaar Verhoeff check digit is and why UIDAI uses it

An Aadhaar number is a twelve-digit string in which the final digit is not chosen freely: it is produced by the Verhoeff algorithm applied to the first eleven digits. Verhoeff works in the dihedral group of order ten with fixed multiplication, permutation, and inverse tables. Digits are processed from right to left; each digit is permuted by its position (modulo eight) and then combined with a running checksum.

When the algorithm is used to generate a check digit, the inverse of the interim checksum is appended so that a full twelve-digit number always yields a zero checksum when re-evaluated. That property detects every single-digit error and every adjacent transposition—error patterns that dominate form entry and OCR. UIDAI also requires that a valid Aadhaar never starts with zero or one, which this tool enforces on both compute and validate paths so synthetic or mistyped prefixes are rejected early.

Compared with Luhn (used on many payment cards) and Damm (another quasigroup check), Verhoeff is the specific scheme chosen for Aadhaar; reusing a Luhn validator on an Aadhaar field produces false confidence. This capability implements only the published check arithmetic. It does not contact UIDAI, prove residency, retrieve demographic data, or assert that a number is assigned to a living person.

A passing checksum means the digit string is consistent under Verhoeff and the first-digit rule—not that identity verification succeeded.

Where Aadhaar check digits fit KYC, forms, and data pipelines

Onboarding and KYC forms in India often collect Aadhaar for linkage or e-KYC hand-off. Batch imports of customer or employee files can run validate mode over every row and quarantine numbers whose check digit no longer matches, which is cheaper than discovering corruption during a failed bulk operation later. Content sites ranking for Aadhaar check digit calculator or Verhoeff Aadhaar validator benefit from a live tool whose free browser path matches the paid automation path byte-for-byte.

Do not treat a passing Verhoeff check as proof of identity, enrolment status, biometric match, or authorization to act on someone’s behalf—it only proves the digit string is consistent under the Aadhaar Verhoeff algorithm and UIDAI first-digit constraint.

Audit Aadhaar columns in partner and KYC files

Batch-validate every Aadhaar in a CSV import and quarantine rows whose check digit no longer matches the recomputed expected value.

What is the Aadhaar Verhoeff check digit?

It is the twelfth digit of an Aadhaar number, computed with the Verhoeff dihedral algorithm over the first eleven digits so that single-digit errors and adjacent transpositions break the checksum.

Why must the first digit be 2–9?

UIDAI Aadhaar numbers never start with 0 or 1. This tool rejects bodies and full numbers that violate that rule so you do not accept structurally impossible UIDs.

What does the Aadhaar Verhoeff check digit tool cost?

The browser tool is free. A valid checksum is not proof of identity or UIDAI enrolment.

Does a valid Aadhaar check digit prove the number belongs to someone?

No. The check is pure arithmetic: it never contacts UIDAI, looks up a registry or confirms residency. A pass only means the twelve digits are consistent under Verhoeff and the first-digit rule, not that identity verification succeeded.

Which typing mistakes does the Aadhaar check digit catch?

Every single wrong digit and every swap of two neighbouring digits, the errors that dominate form entry and scanned text. A Luhn checker, used on many payment cards, is a different scheme and gives false confidence on an Aadhaar field.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/enc/aadhaar-india

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/enc/aadhaar-india \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"aadhaar":"23456789012"}'
{
  "aadhaar": "23456789012"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "enc.aadhaar_india",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Spaces and hyphens in the common XXXX XXXX XXXX display form are accepted; non-digit characters and wrong lengths fail with invalid_input. Use it free in the browser or call the KIT API at the published price; both paths run the same Verhoeff tables.

How to compute a check digit or validate a full twelve-digit Aadhaar

Send an aadhaar field with digits zero through nine, optionally grouped with spaces or hyphens as in 2345 6789 0124. Mode compute is the default: provide exactly eleven digits without the check digit (for example 23456789012 or 2345 6789 012). Mode validate expects a complete twelve-digit number including the trailing check digit. The engine returns check_digit as a one-character string, with_check as the full twelve-digit string, and formatted as XXXX XXXX XXXX for display. The response reports valid true when the Verhoeff checksum of the whole number is zero (equivalently, when the recomputed check digit matches the last digit), and always includes check_digit, expected_check_digit, payload without the last digit, and formatted. Empty strings, missing aadhaar, invalid mode values, wrong lengths, first digit zero or one, and non-digit characters fail with invalid_input before any table lookup completes and are not billed. Because the path is pure parse with no clock, random source, or network, the same input always yields the same JSON on the free browser tool and on the API. At $0.002 per successful request you can gate onboarding forms, partner file imports, and internal generators without negotiating a custom tier. Prefer compute when you assemble a number from a known eleven-digit body; prefer validate when a user, partner CSV, or scanned label supplies a full UID and you need a boolean gate before a deeper identity workflow.

Where Aadhaar check digits fit KYC, forms, and data pipelines

Validating the Verhoeff digit at the browser or API edge blocks obvious typos before a record is written and before any downstream service is called. Integration tests for OCR pipelines can assert that a cleaned twelve-digit string either validates or is rejected with a clear invalid_input message when noise remains.

Gate Aadhaar fields on web and mobile forms

When a user submits a full twelve-digit Aadhaar, call validate mode and block the save when valid is false, showing expected_check_digit so a single mistype can be corrected before the record is stored.

Compute check digits for synthetic or completed UIDs

From an eleven-digit body that starts with 2–9, call compute mode and store with_check or formatted so every test fixture and completed string carries the correct Verhoeff trailing digit.

How do I compute an Aadhaar check digit with this API?

POST with aadhaar set to eleven digits (spaces or hyphens optional) and mode compute (or omit mode). The response includes check_digit, with_check, and formatted as XXXX XXXX XXXX.

How do I validate a full twelve-digit Aadhaar?

POST with aadhaar set to twelve digits and mode validate. The response sets valid true when the Verhoeff checksum is zero and includes expected_check_digit for comparison.

Read the full KIT documentation →