Pruebas y QA · 6 min de lectura

Formato de códigos postales por país: referencia de regex para 2026

Formatos de códigos postales de 38 países con regex funcionales: sistemas numéricos y alfanuméricos, países sin código postal, reglas de normalización y un corpus de pruebas.

Por Charlie Simmon ·

Los formatos de códigos postales no son intercambiables, y un validador que asume cinco dígitos rechazará la mayor parte del mundo. Las diferencias son estructurales, no cosméticas: algunos sistemas son numéricos con ceros a la izquierda, otros mezclan letras y dígitos, algunos colocan el código antes de la ciudad, y dos países del conjunto de datos de ejemplo de este sitio no tienen códigos postales en absoluto.

Esta referencia recopila los patrones que importan para un desarrollador que construye un formulario de dirección, con regex que puede probar directamente. También traza la misma línea que traza el sitio: la validación postal aquí es una comprobación de estructura para todos los países, más una comprobación de existencia para los ZIP de EE. UU. contra un conjunto de datos de 40.979 filas. Nada en esta guía implica que un código coincidente esté asignado o sea entregable.

Por qué los códigos postales no son un campo numérico

Estados Unidos usa cinco dígitos o ZIP+4, lo que tienta a los desarrolladores a modelar los códigos postales como enteros. Ese modelo se rompe de inmediato en Canadá, el Reino Unido, los Países Bajos, Irlanda, Malta y Argentina, donde las letras forman parte del código. También se rompe silenciosamente en Alemania, Francia, España, Italia y Polonia, donde los ceros a la izquierda son significativos y una columna entera los elimina.

Una segunda clase de errores proviene de la posición. La mayoría de los países occidentales colocan el código postal después de la ciudad, pero Alemania, Francia, los Países Bajos y Japón lo colocan antes de la ciudad, y Japón pone el código completo al principio mismo de la dirección. Si su formulario renderiza una plantilla fija, producirá direcciones que un lector local encontrará obviamente incorrectas aunque todos los campos estén completados.

  • Almacene siempre los códigos postales como texto, nunca como enteros
  • Mantenga los ceros a la izquierda intactos en todas las capas, incluida la exportación a CSV
  • Permita letras a menos que el país sea estrictamente numérico
  • No asuma que el código postal va después de la ciudad
  • Trate el separador como presentación, no como estructura

Sistemas numéricos y sus rangos

La mayor parte de Europa usa códigos numéricos de longitud fija. Alemania, Francia, España, Italia, Grecia, Turquía y Arabia Saudita usan cinco dígitos; Austria, Bélgica, Suiza, Dinamarca, Noruega, Hungría y Sudáfrica usan cuatro; Polonia y Portugal añaden un guion; Suecia usa tres dígitos, un espacio y dos. Chequia usa cinco dígitos que normalmente se escriben con un espacio después del tercero.

Asia y América Latina son mayoritariamente numéricos pero con longitudes diferentes. India, China, Rusia, Singapur y Nigeria usan seis dígitos; Japón usa siete con un guion convencional después del tercero; Corea del Sur usa cinco; Brasil usa ocho con un guion después del quinto; Chile usa siete; Colombia usa seis; Perú y México usan cinco. La longitud por sí sola no basta para identificar un país, por lo que un validador necesita el campo de país antes de validar cualquier cosa.

PaísLongitudForma canónicaRegex
Alemania5 dígitos10115^\d{5}$
Francia5 dígitos75008^\d{5}$
España5 dígitos28013^\d{5}$
Austria4 dígitos1010^\d{4}$
Polonia5 dígitos con guion00-001^\d{2}-\d{3}$
Portugal7 dígitos con guion1250-096^\d{4}-\d{3}$
Suecia5 dígitos con espacio114 55^\d{3}\s\d{2}$
Japón7 dígitos con guion100-0001^\d{3}-\d{4}$
Brasil8 dígitos con guion01310-100^\d{5}-\d{3}$
India6 dígitos110001^\d{6}$
Corea del Sur5 dígitos04524^\d{5}$
México5 dígitos06600^\d{5}$

Sistemas alfanuméricos y sus reglas de caracteres

Canadá usa el patrón A1A 1A1, y las letras están restringidas. El primer carácter no puede ser D, F, I, O, Q, U, W ni Z, y las letras restantes no pueden ser D, F, I, O, Q ni U. El espacio entre los dos tríos es convencional. Un validador que permita cualquier letra aceptará códigos que Canada Post nunca emite.

El Reino Unido usa un código exterior de dos a cuatro caracteres seguido de un solo espacio y un código interior de tres caracteres, como SW1A 1AA. Los Países Bajos son cuatro dígitos, un espacio y dos letras mayúsculas. Irlanda usa un Eircode de siete caracteres dividido en una clave de enrutamiento de tres caracteres y un identificador único de cuatro caracteres. Malta es tres letras, un espacio y cuatro dígitos. Argentina usa el CPA de ocho caracteres, una letra seguida de cuatro dígitos y tres letras, por ejemplo C1425ABC.

PaísPatrónEjemploRegex
CanadáA1A 1A1 con letras restringidasK1A 0B1^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] ?\d[ABCEGHJKLMNPRSTVWXYZ]\d$
Reino UnidoExterior de 2-4 caracteres, interior de 3SW1A 1AA^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$
Países Bajos4 dígitos, 2 letras1012 AB^\d{4} ?[A-Z]{2}$
IrlandaClave de enrutamiento de 3 caracteres, identificador de 4D02 X285^(?:[A-Z]\d{2}|D6W) ?[A-Z0-9]{4}$
Malta3 letras, 4 dígitosVLT 1117^[A-Z]{3} ?\d{4}$
ArgentinaLetra, 4 dígitos, 3 letrasC1425ABC^[A-Z]\d{4}[A-Z]{3}$

Países sin código postal

Hong Kong y los Emiratos Árabes Unidos no tienen sistema de códigos postales. Ambos están en el conjunto de datos de ejemplo de 38 países de este sitio, y el generador devuelve un valor postal vacío para ellos en lugar de inventar dígitos. Este es el comportamiento correcto y también un caso de prueba útil, porque un formulario que marca el código postal como obligatorio está roto para ambos mercados.

La convención de los EAU es un número de apartado postal (P.O. Box), que no es un código postal y no debe forzarse en ese campo. Las direcciones de Hong Kong usan el distrito y la calle, y el correo se entrega sin ningún código. Si su modelo de datos requiere un valor postal no nulo, use un centinela explícito como una marca a nivel de país, no un código falso, porque un código falso pasará la validación y luego fallará en todas las comprobaciones posteriores que asumen uno real.

  • Hong Kong: sin código postal, el distrito más la calle es la dirección
  • Emiratos Árabes Unidos: sin código postal, el P.O. Box es la convención común
  • Haga opcional el campo postal cuando se seleccione cualquiera de los dos países
  • Nunca sustituya 00000 o N/A en una columna postal
  • Registre la ausencia de forma explícita para que las exportaciones no parezcan datos faltantes

Comprobaciones de estructura frente a comprobaciones de existencia

Una comprobación de estructura responde si una cadena coincide con el patrón del país. Una comprobación de existencia responde si el código aparece en un conjunto de datos de referencia. Solo la segunda puede decirle que un código nunca fue asignado. Este sitio realiza la comprobación de estructura para los 38 países y una comprobación de existencia para los ZIP de EE. UU. contra 40.979 filas, y las etiqueta de forma diferente para que nadie confunda una con la otra.

Ninguna de las dos comprobaciones demuestra entregabilidad. Un ZIP de EE. UU. de cinco dígitos puede existir mientras que la dirección postal debajo de él no, y un código alemán estructuralmente válido puede pertenecer a una ciudad diferente de la proporcionada. Si necesita ese nivel de garantía, necesita un conjunto de datos de referencia postal y una base de datos a nivel de calle, que es un producto diferente de un verificador de formato.

Tipo de comprobaciónCubreDemuestraNo demuestra
Coincidencia de patrónLos 38 paísesBien formado para ese paísQue el código esté asignado
Existencia de ZIP de EE. UU.40.979 filas de ZIP de EE. UU.Que el código está en el conjunto de datosCoincidencia de ciudad o calle
Regla de campo obligatorioNivel de formularioQue el envío puede continuarNinguna validez en el mundo real
Longitud y conjunto de caracteresNivel de campoQue el almacenamiento no se desbordaráCorrección del país

Detalles de regex que causan errores en producción

Ancle cada patrón. Un /\d{5}/ sin anclar coincide con los cinco dígitos dentro de una cadena de nueve dígitos e informa éxito. Use ^ y $, o la API equivalente de coincidencia completa. En JavaScript, \d coincide solo con dígitos ASCII; en Python, \d coincide con dígitos Unicode de forma predeterminada, por lo que un patrón puede aceptar numerales árabes orientales a menos que compile con re.ASCII o escriba [0-9].

Decida explícitamente si el separador es obligatorio. Para la visualización, inserte usted mismo el separador canónico. Para la entrada, acepte cero o un espacio o guion y normalice. Tenga cuidado con los guiones dentro de las clases de caracteres, donde definen rangos a menos que se escapen o se coloquen al final. Y no use una bandera de insensibilidad a mayúsculas para tapar un error de normalización: convierta el valor a mayúsculas al escribir y mantenga la forma de visualización canónica.

  • Ancle con ^ y $, o use una función de coincidencia completa
  • Use [0-9] cuando quiera decir dígitos ASCII
  • Acepte separadores opcionales en la entrada, emita separadores canónicos en la visualización
  • Escape los guiones o colóquelos al final dentro de una clase de caracteres
  • Convierta a mayúsculas antes de comparar en lugar de dispersar banderas de mayúsculas
  • Rechace explícitamente los espacios de no separación y los caracteres de ancho cero

Normalizar al escribir, formatear al mostrar

Almacene una forma canónica y derive la forma de visualización. La forma canónica suele ser mayúsculas con el separador estándar, o solo dígitos cuando el separador es puramente convencional. Mantenga la entrada original del usuario en una columna separada si necesita una pista de auditoría, porque la normalización es con pérdida y un agente de soporte puede necesitar ver exactamente lo que se escribió.

La normalización específica por país es pequeña pero real. Canadá quiere una letra mayúscula, un dígito, una letra, un espacio, un dígito, una letra y un dígito. Los Países Bajos quieren letras mayúsculas después de los dígitos. El Reino Unido quiere un solo espacio y mayúsculas. Brasil y Japón usan un guion que los usuarios suelen omitir, así que normalice a la forma con guion. Alemania no quiere ningún separador y debe conservar el cero a la izquierda.

PaísEntrada originalCanónico almacenadoVisualización
Canadák1a0b1K1A 0B1K1A 0B1
Países Bajos1012ab1012 AB1012 AB
Reino Unidosw1a1aaSW1A 1AASW1A 1AA
Brasil0131010001310-10001310-100
Japón1000001100-0001100-0001
Alemania101151011510115
Suecia11455114 55114 55

Un corpus de pruebas que puede copiar

Todo validador necesita un corpus con al menos un caso válido y uno inválido por país, además de casos que prueben específicamente la normalización y el almacenamiento. La tabla siguiente es un conjunto inicial. Observe que varios casos inválidos son inválidos por razones específicas del país en lugar de genéricas, que es donde la mayoría de las pruebas escritas a mano se detienen demasiado pronto.

Añada casos para los países sin código postal, para los ceros a la izquierda y para las variantes de separador que los usuarios realmente escriben. Si el validador se comparte entre cliente y servidor, ejecute el mismo corpus contra ambas implementaciones; una divergencia entre un cliente permisivo y un servidor estricto es la fuente más común de informes de «el formulario lo aceptó pero la API lo rechazó».

CasoValorPaísEsperado
ZIP+4 válido97205-2515Estados UnidosAceptar
ZIP+4 inválido97205-251Estados UnidosRechazar
Canadiense válidoK1A 0B1CanadáAceptar
Letra canadiense no válidaD1A 0B1CanadáRechazar
Británico válidoSW1A 1AAReino UnidoAceptar
Interior británico faltanteSW1AReino UnidoRechazar
Cero a la izquierda alemán01067AlemaniaAceptar y conservar
Letras en un sistema numérico1011AAlemaniaRechazar
Sin códigoHong KongAceptar como vacío
Código inventado99999Emiratos Árabes UnidosRechazar el campo

Preguntas

¿Qué países no tienen códigos postales?+
Hong Kong y los Emiratos Árabes Unidos no tienen ninguno, y ambos están en el conjunto de datos de ejemplo de 38 países de este sitio. El generador devuelve un campo postal vacío para ellos en lugar de inventar un valor.
¿Un código postal válido significa que la dirección es real?+
No. Una coincidencia estructural solo significa que el valor está bien formado. Aquí solo los ZIP de EE. UU. reciben una comprobación de existencia, contra 40.979 filas, y ningún país recibe una afirmación de entregabilidad.
¿Deben almacenarse los códigos postales como enteros?+
Nunca. Canadá, el Reino Unido, los Países Bajos, Irlanda, Malta y Argentina usan letras, y Alemania, Francia, España, Italia y Polonia tienen ceros a la izquierda significativos.
¿Por qué los Países Bajos ponen letras después de los dígitos?+
El código neerlandés son cuatro dígitos seguidos de dos letras mayúsculas, por ejemplo 1012 AB. Las letras forman parte del código, no son un sufijo de región, y una regex de solo dígitos rechaza direcciones válidas.
¿Cómo debo manejar el espacio en un código británico o canadiense?+
Acepte la entrada con cero o un espacio, conviértala a mayúsculas y almacene un único separador canónico. Emita la forma canónica para la visualización en lugar de repetir lo que el usuario escribió.

Los ejemplos son sintéticos. No utilices una dirección generada para verificaciones de identidad, registro de cuentas ni entregas.

Estándares de referencia

Leer a continuación

Todas las guías