Early accessWe're onboarding teams in batches. The sandbox and docs are open to everyone. Request access →

Skip to content
APIserver.in

Free tool

GSTIN validator

Checks format, state code, embedded PAN and the official mod-36 checksum — and tells you exactly which part failed. Runs in your browser; nothing is sent anywhere.

Try

Valid GSTIN · Karnataka

  • Passed:Length15 characters
  • Passed:CharactersOnly A–Z and 0–9
  • Passed:State code (1–2)29 — Karnataka
  • Passed:Embedded PAN (3–12)AAJCK4821M — Company
  • Passed:Entity number (13)1 — registration #1 under this PAN in the state
  • Passed:Default character (14)Z
  • Passed:Checksum (15)1 — mod-36 check passes
State
Karnataka (29)
PAN holder
Company
Registration in state
#1

Runs entirely in your browser. Nothing you type is sent anywhere.

Anatomy of a GSTIN

  • 1–2 · State code. 01–38 for states and UTs, 97 for other territory, 99 for centre jurisdiction.
  • 3–12 · PAN. The business's PAN; its 4th character encodes the holder type.
  • 13 · Entity number. 1–9 then A–Z: which registration this is for the same PAN in the same state.
  • 14 · Default character. Always Z for regular registrations.
  • 15 · Check character. Luhn mod 36 over the first 14 characters.

A valid format means the number is well-formed — not that it is registered or active. To confirm status, legal name and address, call GST Verify.

The checksum, in 10 lines
const CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

function gstinChecksum(first14) {
  let sum = 0;
  for (let i = 0; i < 14; i++) {
    const value = CHARS.indexOf(first14[i]);
    const product = value * (i % 2 === 0 ? 1 : 2); // weights 1,2,1,2…
    sum += Math.floor(product / 36) + (product % 36);
  }
  return CHARS[(36 - (sum % 36)) % 36];
}

Need this programmatically? Use the API.

Validate and verify in one call — status, legal name, address. GST Verify is ₹0.75 per successful call, GST included. Failed calls ₹0.