CURP Validator
CURP (Mexican population ID) · Issuer: RENAPO. Bank onboarding, government services, school and health systems.
Free online validator
Validated with the public algorithm; we don't store your input.Format
18 characters: 4 name letters, YYMMDD birth date, sex (H/M/X), state (2), 3 inner consonants, a differentiator and a check digit.
Check-digit algorithm
- Map 0–9 → 0–9, A → 10 … Ñ → 24 … Z → 36.
- Multiply the first 17 by weights 18..2 and sum.
- Check digit = (10 − sum mod 10) mod 10.
Use cases
Bank onboarding, government services, school and health systems.
Code examples
# curl (RapidAPI)
curl -X POST "https://validalatam.p.rapidapi.com/validate" -H "Content-Type: application/json" \
-H "X-RapidAPI-Key: $RAPIDAPI_KEY" -H "X-RapidAPI-Host: validalatam.p.rapidapi.com" \
-d '{"type":"MX_CURP","value":"EOWE671001HNLNGS18"}'
# Python
import requests
r = requests.post("https://validalatam.p.rapidapi.com/validate", json={"type": "MX_CURP", "value": "EOWE671001HNLNGS18"},
headers={"X-RapidAPI-Key": KEY, "X-RapidAPI-Host": "validalatam.p.rapidapi.com"})
print(r.json()["valid"], r.json()["formatted"])
// JavaScript (fetch)
const r = await fetch("https://validalatam.p.rapidapi.com/validate", { method: "POST",
headers: { "Content-Type": "application/json", "X-RapidAPI-Key": KEY, "X-RapidAPI-Host": "validalatam.p.rapidapi.com" },
body: JSON.stringify({ type: "MX_CURP", value: "EOWE671001HNLNGS18" }) });
const { valid, formatted, error } = await r.json();
# Response
{
"valid": true,
"type": "MX_CURP",
"country": "MX",
"input": "EOWE671001HNLNGS18",
"normalized": "EOWE671001HNLNGS18",
"formatted": "EOWE671001HNLNGS18"
}
API plans on RapidAPI
Free plan to get started; paid plans for production volume and batch validation (up to 1000 per request).
FAQ
How is the CURP check digit calculated?
Map 0–9 → 0–9, A → 10 … Ñ → 24 … Z → 36. Multiply the first 17 by weights 18..2 and sum. Check digit = (10 − sum mod 10) mod 10.
What is the CURP format?
18 characters: 4 name letters, YYMMDD birth date, sex (H/M/X), state (2), 3 inner consonants, a differentiator and a check digit.
What does character 17 mean?
It's a differentiator: a digit for births before 2000 and a letter from 2000.
Is this validator free?
Yes, the web tool is free. To integrate it, use the API: there's a free plan on RapidAPI.
Does the API store the numbers I validate?
No. Validation is deterministic, with no storage and no third-party lookups.