Business-ES-CodigoPostal ======================== Validación de códigos postales españoles: formato, provincia, comunidad autónoma, región y localidades. use Business::ES::CodigoPostal qw(validate_cp municipios asignado); my $cp = validate_cp('18001'); if ($cp->{valid}) { print $cp->{provincia}; # Granada print $cp->{ca}; # Andalucía print $cp->{region}; # Peninsula print $cp->{iso_3166_2}; # ES-GR } else { print $cp->{error}; } my @m = municipios('28017'); # ('Madrid') También hay interfaz orientada a objetos: my $cp = Business::ES::CodigoPostal->new(codigo => '28001'); $cp->provincia; $cp->ca; $cp->region; $cp->insular; $cp->set('08001'); VALIDAR NO ES EXISTIR --------------------- validate_cp comprueba que el código tenga cinco dígitos y caiga en el rango 01000-52999, es decir, que su prefijo sea un número de provincia real. Eso no garantiza que el código esté asignado a algún sitio: validate_cp('28107')->{valid} # 1 -- prefijo 28, Madrid asignado('28107') # 0 -- no existe Alcobendas es 28100, 28108 y 28109. Una transposición de dígitos dentro de la misma provincia sólo se detecta preguntando por la localidad, y es un error frecuente en direcciones tecleadas a mano. NORMALIZACIÓN ------------- Por defecto la validación es estricta. Con strict a 0 se limpia la entrada, que es lo que hace falta al procesar hojas de cálculo, donde los ceros iniciales desaparecen: validate_cp('8015', { strict => 0 })->{provincia} # Barcelona CODIFICACIÓN ------------ Desde la 0.03 el módulo devuelve CARACTERES en todas sus salidas de texto. Hasta la 0.02 devolvía bytes UTF-8 crudos, y guardarlos en una base de datos con la conexión en UTF-8 producía doble codificación. Si tu código decodificaba la salida, deja de hacerlo. INSTALACIÓN ----------- perl Makefile.PL make make test make install O con cpanm: cpanm Business::ES::CodigoPostal DATOS ----- Las tablas de provincias, comunidades y regiones son propias del módulo. Las localidades de Business::ES::CodigoPostal::Municipios proceden de GeoNames (https://www.geonames.org/, volcado export/zip/ES.zip), bajo licencia Creative Commons Attribution 4.0 (https://creativecommons.org/licenses/by/4.0/). Se regeneran con maint/gen-municipios.pl. Ese módulo pesa unos 650 KB y se carga sólo cuando se piden localidades: validar un código o resolver su provincia no lo toca. LICENCIA -------- Copyright 2025-2026 HDELGADO. Software libre bajo los mismos términos que Perl. Los datos de localidades conservan su licencia propia (CC BY 4.0).