NAME
Business::ES::CodigoPostal - Validación de códigos postales españoles: provincia, comunidad, región y localidades
VERSION
version 0.03
SYNOPSIS
use Business::ES::CodigoPostal 'validate_cp';
# OO
$cp = Business::ES::CodigoPostal->new( codigo => '28001' );
$cp = Business::ES::CodigoPostal->new({ codigo => '28001' );
# function
$cp = validate_cp('18001');
$cp = validate_cp('18001', { strict => 0 }); # _normalize()
if ($cp->{valid}) {
print $cp->{provincia}; # Granada
print $cp->{region}; # Peninsula
print $cp->{ca}; # Andalucia
} else {
print $cp->{error};
}
# localidades (carga los datos solo al pedirlas)
my @m = Business::ES::CodigoPostal::municipios('28017'); # ('Madrid')
Business::ES::CodigoPostal::asignado('28107'); # 0 -- no existe
DESCRIPTION
Este módulo permite validar códigos postales de España y obtener su provincia asociada. El rango válido de códigos es de 01000 a 52999.
Por defecto devuelve código ISO 3166-2
NAME
Business::ES::CodigoPostal - Validación de códigos postales españoles: provincia, comunidad, región y localidades
SUBROUTINES/METHODS
codigo
Devuelve el código postal almacenado en el objeto.
my $codigo = $cp->codigo;
error
Devuelve el mensaje de error si el código postal no es válido.
my $error = $cp->error;
print "Error: $error" if defined $error;
iso_3166_2
Devuelve el código ISO 3166-2 de la provincia.
my $iso = $cp->iso_3166_2;
insular
Devuelve 1 si el código postal corresponde a territorio insular (Baleares o Canarias).
if ($cp->insular) {
print "Este CP está en una isla";
}
strict
Controla el modo de validación, modo strict por defecto, no se normaliza la entrada.
$cp->strict(0); # Permitir normalización
my $is_strict = $cp->strict;
provincia
Devuelve el nombre de la provincia correspondiente al código postal.
my $provincia = $cp->provincia;
print "Provincia: $provincia" if $cp->valid;
prov_code
Código de provincia los primeros 2 digitos
region
Región: Baleares, Las Palmas, Santa Cruz de Tenerife
my $region = $cp->region;
valid
Indica si el código postal es válido (1) o no (0).
my $es_valido = $cp->valid;
ca
Devuelve la comunidad autónoma correspondiente al código postal.
my $ccaa = $cp->ca;
_normalize
Limpia y agrupa el código postal, cuando se fija strict a 0
validate_cp
Función que valida un código postal y devuelve un hash con el resultado.
my $resultado = validate_cp('28001');
if ($resultado->{valid}) {
print "Código: " . $resultado->{codigo};
print "Provincia: " . $resultado->{provincia};
print "ISO 3166-2: " . $resultado->{iso_3166_2};
} else {
print "Error: " . $resultado->{error};
}
Retorna un hash con las claves: - valid : 1 si es válido, 0 si no - codigo : código postal - provincia : nombre de la provincia (si es válido) - iso_3166_2 : código ISO 3166-2 de la provincia (si es válido) - error : mensaje de error (si no es válido)
new
Crea un nuevo objeto de código postal.
my $cp = Business::ES::CodigoPostal->new();
my $cp = Business::ES::CodigoPostal->new(codigo => '28001');
my $cp = Business::ES::CodigoPostal->new({ codigo => '28001', strict => 0, iso_3166_2 => 0 });
Parámetros: - codigo : Código postal a validar - strict : Modo strict (Por defecto), a 0 para normalizar la entrada - iso_3166_2: Incluir código ISO 3166-2 (Por defecto)
_set_error
Fija el error como argumento el texto a guardar
set
Fija nuevo código postal
my $res = $cp->set('08001');
unless ($res) {
print "Error: " . $cp->error;
}
Retorna 1 si el código posta es válido o 0 si no.
municipios
Localidades de un código postal, ordenadas. Lista vacía si no consta.
my @m = $cp->municipios; # OO
my @m = Business::ES::CodigoPostal::municipios('28017'); # función
Los datos viven en Business::ES::CodigoPostal::Municipios y se cargan solo al llamar aquí: validar un código postal o resolver su provincia no los toca. Cargarlos cuesta unos 20 ms y unos 4 MB, una sola vez por proceso.
Las localidades salen decodificadas (caracteres, no bytes), a diferencia de provincia y ca, que devuelven los literales del módulo tal cual.
asignado
Cierto si el código postal está asignado a alguna localidad.
Business::ES::CodigoPostal::asignado('28017'); # 1 -- Madrid
Business::ES::CodigoPostal::asignado('28107'); # 0 -- no existe
Es una comprobación distinta de valid, y más estrecha: valid mira que el código esté en el rango 01000-52999, así que da por bueno cualquier número con un prefijo de provincia real. 28107 pasa esa validación --prefijo 28, Madrid-- y sin embargo no existe: Alcobendas es 28100, 28108 y 28109. Un error de transposición dentro de la misma provincia solo se ve preguntando por la localidad.
Falso significa "no consta en los datos". Para España el volcado está prácticamente completo, pero no es lo mismo que "no existe".
AUTHOR
HDELGADO <hdelgado@cpan.org>
FUENTE DE LOS DATOS
Los nombres de provincia, comunidad autónoma y región son tablas propias del módulo.
Las localidades de Business::ES::CodigoPostal::Municipios proceden de GeoNames (volcado export/zip/ES.zip), bajo licencia Creative Commons Attribution 4.0: https://creativecommons.org/licenses/by/4.0/.
LICENCIA
Copyright 2025-2026 HDELGADO.
Este módulo es software libre; puede redistribuirse y modificarse bajo los mismos términos que Perl mismo. Los datos de localidades conservan su licencia propia (CC BY 4.0), indicada arriba.
AUTHOR
HDELGADO <hdelgado@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2026 by HDELGADO.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.