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
Zfor 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.