@zenuinebit/address-india
v0.1.0
Published
India: PIN code zones, state codes, GSTIN and PAN validation.
Readme
@zenuinebit/address-india
Indian state codes, PIN code checks, PAN and GSTIN validation. No dependencies.
import { isValidPin, pinZone, findState, isValidPan, panHolderType, validateGstin, gstKind } from "@zenuinebit/address-india";
isValidPin("560 001"); // true
pinZone("560001"); // { zone: 5, states: ["Andhra Pradesh", "Telangana", "Karnataka"] }
findState("mh"); // { code: "27", name: "Maharashtra", abbr: "MH" }
findState("Orissa")?.name; // "Odisha"
isValidPan("ABCPD1234E"); // true
panHolderType("ABCPD1234E"); // "Individual"
const g = validateGstin("27AAPFU0939F1ZV");
g.valid; // true
g.state?.name; // "Maharashtra"
g.pan; // "AAPFU0939F"
// CGST + SGST or IGST? Pair with @zenuinebit/tax (gstIntraState / gstInterState)
gstKind("27AAPFU0939F1ZV", "Karnataka"); // "inter"What "valid" means
- PIN: six digits, the first not 0. The first digit gives a postal zone covering several states; it does not tell you the state. Whether a PIN really exists needs India Post data, which is not included.
- PAN: the right shape, with a known holder type as the 4th letter. It does not prove the PAN was issued.
- GSTIN: 15 characters, known state code, a valid PAN inside,
Zin position 14 and the correct check character. This catches typos. It does not prove the business is registered or active: check on the GST portal for that.
State codes are the GST codes (27 = Maharashtra). Old codes are not used; Daman and Diu is part of code 26.
Not included: district or city lookup, PIN-to-state data, Aadhaar, and address parsing.
