| Code | Scope | Length | Check digit | Confidence |
|---|---|---|---|---|
SV_DUI |
both (personal + tax for naturales post-2021) | 9 | mod-10 weighted | moderate |
SV_NIT |
tax | 14 | mod-11 weighted | moderate |
SV_DUI — Documento Único de IdentidadPersonal identity document for Salvadoran citizens. Issued by the Registro Nacional de las Personas Naturales (RNPN). Since Decree 763 (July 2021), the DUI doubles as the NIT for natural persons in DTE invoicing (CAT-022 tipoDocumento value 13).
XXXXXXXX-Xmod-10 weighted with descending weights from 9 to 2 over the first 8 digits.
weights = [9, 8, 7, 6, 5, 4, 3, 2]
sum = sum(digit[i] * weights[i] for i in 0..7)
expected_dv = (10 - (sum mod 10)) mod 10
valid iff expected_dv == digit[8]
valid:
- 045678903
- 04567890-3
- 123456784
- 12345678-4
- 000000000
invalid (format):
- "" (empty)
- 1234 (too short)
- 1234567890 (too long)
- abcdefghi (non-digits)
invalid (checksum):
- 045678900
- 123456780
- 987654321
moderate until in-country verification confirms.SV_NIT — Número de Identificación TributariaTax identifier for businesses (and historically for natural persons before the DUI=NIT reform). Issued by the Ministerio de Hacienda — Dirección General de Impuestos Internos (DGII).
AAAA-DDMMYY-NNN-Dmod-11 weighted with descending weights from 14 to 2 over the first 13 digits.
weights = [14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
sum = sum(digit[i] * weights[i] for i in 0..12)
mod = sum mod 11
expected_dv =
0 if mod == 0
1 if mod == 1
11 - mod otherwise
valid iff expected_dv == digit[13]
tipoDocumento catalog: https://www.mh.gob.sv/valid:
- 06141505851015
- 0614-150585-101-5
invalid (format):
- 1234 (too short)
- 061415058510155 (too long)
- ABCDEFGHIJKLMN (non-digits)
invalid (checksum):
- 06141505851010
- 06141505851014
moderate.SV_PASAPORTE — PasaporteTravel document issued by the Dirección General de Migración y Extranjería (DGME). DGME has not published the issuance format; community samples on current biometric passports show 9-digit numeric numbers, with legacy issuances occasionally carrying a single uppercase-letter prefix.
None on the printed number. MRZ check digit lives in
algorithms/icao-9303.ts (mrzCheckDigit, validateMrzNumber).
low — no first-party publication.