Provincias y localidades de España / Códigos postales

Casi todos nos habremos encontrado con este problema a la hora de abordar el desarrollo de algunas aplicaciones:
Tener la lista de provincias de España en la base de datos, poder saber qué provincia es a partir del código postal, tener el listado de poblaciones de una determinada provincia.
Seguro que a más de uno le viene bien lo que dejo aquí ;)

<?php

$provincias = array (
	 array ('id' => "01", "nombre" => "ALAVA"),
	 array ('id' => "02", "nombre" => "ALBACETE"),
	 array ('id' => "03", "nombre" => "ALICANTE"),
	 array ('id' => "04", "nombre" => "ALMERIA"),
	 array ('id' => "33", "nombre" => "ASTURIAS"),
	 array ('id' => "05", "nombre" => "AVILA"),
	 array ('id' => "06", "nombre" => "BADAJOZ"),
	 array ('id' => "08", "nombre" => "BARCELONA"),
	 array ('id' => "09", "nombre" => "BURGOS"),
	 array ('id' => "10", "nombre" => "CACERES"),
	 array ('id' => "11", "nombre" => "CADIZ"),
	 array ('id' => "39", "nombre" => "CANTABRIA"),
	 array ('id' => "12", "nombre" => "CASTELLON"),
	 array ('id' => "51", "nombre" => "CEUTA"),
	 array ('id' => "13", "nombre" => "CIUDAD REAL"),
	 array ('id' => "14", "nombre" => "CORDOBA"),
	 array ('id' => "15", "nombre" => "CORUÑA, A"),
	 array ('id' => "16", "nombre" => "CUENCA"),
	 array ('id' => "17", "nombre" => "GIRONA"),
	 array ('id' => "18", "nombre" => "GRANADA"),
	 array ('id' => "19", "nombre" => "GUADALAJARA"),
	 array ('id' => "20", "nombre" => "GUIPUZCOA"),
	 array ('id' => "21", "nombre" => "HUELVA"),
	 array ('id' => "22", "nombre" => "HUESCA"),
	 array ('id' => "07", "nombre" => "ILLES BALEARS"),
	 array ('id' => "23", "nombre" => "JAEN"),
	 array ('id' => "24", "nombre" => "LEON"),
	 array ('id' => "25", "nombre" => "LLEIDA"),
	 array ('id' => "27", "nombre" => "LUGO"),
	 array ('id' => "28", "nombre" => "MADRID"),
	 array ('id' => "29", "nombre" => "MALAGA"),
	 array ('id' => "52", "nombre" => "MELILLA"),
	 array ('id' => "30", "nombre" => "MURCIA"),
	 array ('id' => "31", "nombre" => "NAVARRA"),
	 array ('id' => "32", "nombre" => "OURENSE"),
	 array ('id' => "34", "nombre" => "PALENCIA"),
	 array ('id' => "35", "nombre" => "PALMAS, LAS"),
	 array ('id' => "36", "nombre" => "PONTEVEDRA"),
	 array ('id' => "26", "nombre" => "RIOJA, LA"),
	 array ('id' => "37", "nombre" => "SALAMANCA"),
	 array ('id' => "38", "nombre" => "SANTA CRUZ DE TENERIFE"),
	 array ('id' => "40", "nombre" => "SEGOVIA"),
	 array ('id' => "41", "nombre" => "SEVILLA"),
	 array ('id' => "42", "nombre" => "SORIA"),
	 array ('id' => "43", "nombre" => "TARRAGONA"),
	 array ('id' => "44", "nombre" => "TERUEL"),
	 array ('id' => "45", "nombre" => "TOLEDO"),
	 array ('id' => "46", "nombre" => "VALENCIA"),
	 array ('id' => "47", "nombre" => "VALLADOLID"),
	 array ('id' => "48", "nombre" => "VIZCAYA"),
	 array ('id' => "49", "nombre" => "ZAMORA"),
	 array ('id' => "50", "nombre" => "ZARAGOZA")
);
?>

Es un array PHP con los nombres de las provincias y los dos primeros digitos (id) del código postal que le corresponde. No obstante, hay algunas excepciones en esto de los códigos postales. Aquí otra utilidad:

<script type="text/javascript">
/////////////////////////////////////////
//
// CODIGO POSTAL
//

/////////////////////////////////////////
//
// Función constructora del objeto vector
// Este objeto se usa como matriz asociativa
//

function Vector()
{
  this["43421"]="Barcelona";
  this["34492"]="Burgos";
  this["01427"]="Burgos";
  this["34815"]="Burgos";
  this["39232"]="Burgos";
  this["01211"]="Burgos";
  this["42142"]="Burgos";
  this["34260"]="Burgos";
  this["26212"]="Burgos";
  this["14449"]="Ciudad Real";
  this["02636"]="Cuenca";
  this["28190"]="Guadalajara";
  this["08717"]="Guadalajara";
  this["08619"]="Lleida";
  this["22583"]="Lleida";
  this["08281"]="Lleida";
  this["22584"]="Lleida";
  this["08697"]="Lleida";
  this["43449"]="Lleida";
  this["08289"]="Lleida";
  this["32151"]="Lugo";
  this["02438"]="Murcia";
  this["04690"]="Murcia";
  this["04647"]="Murcia";
  this["03657"]="Raspay";
  this["50686"]="Navarra";
  this["09471"]="Segovia";
  this["26127"]="Soria";
  this["28310"]="Toledo";
  this["02215"]="Valencia";
  this["42269"]="Zaragoza";
  this["44591"]="Zaragoza";
  this["22808"]="Zaragoza";
  this["42220"]="Zaragoza";
  this["22806"]="Zaragoza";
}

///////////////////////////////////////////////////////
//
// Nombre de provincia como función del CPostal
//

function obtener_provincia_de_cp(codpos){
// A esta func. la llamamos directamente al perder el foco los campos
// cod. postal de cada sección.

  var nodefinido;        // Necesario para comparar con 'undefined'
  var tiponodefinido,tipoexc;
  var cod = new Array(); // Vector que asocia CP con Provincia
  var exc = new Vector();// Vector asociativo para las excepciones

  cod[1]="Alava";cod[2]="Albacete";cod[3]="Alicante";
  cod[4]="Almeria";cod[5]="Avila";cod[6]="Badajoz";
  cod[7]="Illes Balears";cod[8]="Barcelona";cod[9]="Burgos";
  cod[10]="Caceres";
  cod[11]="Cadiz";cod[12]="Castellon";cod[13]="Ciudad Real";
  cod[14]="Cordoba";cod[15]="A Coruña";cod[16]="Cuenca";
  cod[17]="Girona";cod[18]="Granada";cod[19]="Guadalajara";
  cod[20]="Guipuzcoa";
  cod[21]="Huelva";cod[22]="Huesca";cod[23]="Jaen";cod[24]="Leon";
  cod[25]="Lleida";cod[26]="La Rioja";cod[27]="Lugo";cod[28]="Madrid";
  cod[29]="Malaga";cod[30]="Murcia";
  cod[31]="Navarra";cod[32]="Ourense";cod[33]="Asturias";cod[34]="Palencia";
  cod[35]="Las Palmas";cod[36]="Pontevedra";cod[37]="Salamanca";
  cod[38]="S.C. Tenerife";cod[39]="Cantabria";cod[40]="Segovia";
  cod[41]="Sevilla";cod[42]="Soria";cod[43]="Tarragona";cod[44]="Teruel";
  cod[45]="Toledo";cod[46]="Valencia";cod[47]="Valladolid";cod[48]="Vizcaya";
  cod[49]="Zamora";cod[50]="Zaragoza";
  cod[51]="Ceuta";cod[52]="Melilla";

  if (!isNaN(codpos)){
    if (codpos > 999 && codpos < 53000 && codpos.length == 5){
      var Prov = codpos.substring(0,2);
      if (Prov < 10) Prov=codpos.substring(1,2);
      tiponodefinido= typeof nodefinido;
      tipoexc= typeof exc[codpos];
      if (tipoexc != tiponodefinido) // Si es una excepcion...
        Prov = exc[codpos];           // obtenemos el valor del vector
      else                           // si no lo es...
        Prov = cod[Prov];            // lo pillamos de la tabla cod
      Prov = Prov.toUpperCase();
      return Prov;
    }
  }
  return '';
}
</script>

Y como hoy me siento generoso :P, aquí os coloco un XML con todas las provincias y sus correspondientes localidades.
El Arbol XML tiene la siguiente estructura:

<lista>
	<provincia id="01">
		<nombre><![CDATA[ALAVA]]></nombre>
		<localidades>
			<localidad c="0"><![CDATA[ABERASTURI]]></localidad>
			<localidad c="0"><![CDATA[ABETXUKO]]></localidad>
			<localidad c="0"><![CDATA[ABEZIA]]></localidad>
			<localidad c="0"><![CDATA[ABORNIKANO]]></localidad>
			<localidad c="0"><![CDATA[ACEBEDO]]></localidad>
			<localidad c="0"><![CDATA[ACILU]]></localidad>
			<localidad c="0"><![CDATA[ACOSTA]]></localidad>
			...

		</localidades>
	</provincia>

	...

	<provincia id="29">
		<nombre><![CDATA[MALAGA]]></nombre>
		<localidades>
			<localidad c="0"><![CDATA[RONDA]]></localidad>
			<localidad c="0"><![CDATA[MALAGA]]></localidad>
			...

		</localidades>
	</provincia>
</lista>

Podeis descargaros el XML completo en este enlace (zip).
Espero que os sea de ayuda ;)

Escrito por manuel el viernes 21 de abril 2006
Guardado en Programacion, Varios

21 comentarios para “Provincias y localidades de España / Códigos postales”
Milloman comenta:
viernes 21 de abril de 2006 a las 4:58 pm

Gracias!!!

Se sale… llevo varios días rompiéndome el coco con esto, a ver si puedo componer bien el código para que el formulario funcione….ya te contaré.

Muchas gracias! eres un crack!

JULIAN comenta:
viernes 21 de abril de 2006 a las 11:46 pm

Me gustaría tener el listado de todas las localidades y barrios de Málaga capital y provincia por su código postal.
¿Cómo lo puedo conseguir?

Un saludo.

Julián

manuel comenta:
viernes 21 de abril de 2006 a las 1:00 pm

Hola Julián,

imagino que puedes pedírselo a correos (www.correos.es). Quizá ellos puedan darte un fichero con toda la lista.

Por cierto, si lo consigues, pásamelo ;)

Saludos

jeni comenta:
viernes 21 de abril de 2006 a las 10:09 am

Hola¡¡¡¡
Me gustaria saver los codigos postales con todos los barrios de zaragoza.
donde lo podria encontrar??? o si alguien lo save xfa ke me lo diga.

Gracias

AROA comenta:
viernes 21 de abril de 2006 a las 6:28 pm

Hola buenas. Necesito un listado con los códigos postales de Madrid capital. Los he buscado en varios buscadores de internet, tanto Madrid tanta capital, tanta mierda que de berían barrer.

Disculpen las blasfemias, y gracias anticipadas.

Sin otro particulra, un cordial saludo: AROA

manuel comenta:
viernes 21 de abril de 2006 a las 7:48 pm

Hola,

como comentaba más arriba, creo que podrías pedírselos a los responsables de correos (http://www.correos.es). Quizá ellos puedan proporcionarte un listado.

Saludos

Manel comenta:
viernes 21 de abril de 2006 a las 6:26 pm

Aún no lo he usado, pero ya te doy las gracias!

waa comenta:
viernes 21 de abril de 2006 a las 12:00 pm

Me estoy volviendo loco con esto, lo necesito apra importarlo a una base de datos Oracle para mi proyecto fin de carrera, dios que tortura, asi que esto no me sirve demasiado porque no quisiera tenerlo metidos en arrays si no en base de datos, pero gracias, seguro q a mucha gente como yo le salvas la vida, jeje.Lo de correos….no cuentes con ellos, cobran 600 euros por esos dats aunque deberian ser publicos, asi que eso es lo que hay.

PD: yo de todas formas se lo he pedido a correos y les e suplicado haber si cuela

maria comenta:
viernes 21 de abril de 2006 a las 12:57 pm

Hola quisiera saber los codigos postales por locolidades de la comunidad de Madrid. espero me envies pronto porque me urge . Gracias

Codigos postales de España » ingeniuz :: desarrollo web útil comenta:
viernes 21 de abril de 2006 a las 1:03 pm

[…] que escribí el artículo de Provincias y localidades de España / Códigos postales, me ha sorprendido que se haya convertido en uno de los más leidos del blog. Me alegro, porque eso […]

Emma comenta:
viernes 21 de abril de 2006 a las 5:37 pm

por favor les pido que me envien el codigo de la ciudad de Villanueva urgente…muchas gracias…..saludos emma

juanjo comenta:
viernes 21 de abril de 2006 a las 2:00 am

buenas tardes a todos, viendo que tenemos practicamente para todos los gustos, he leido que alguién la necesitaba para BBDD, pues aquí va para MySQL. un saludo a tod@s


– Estructura de tabla para la tabla `provincias`

CREATE TABLE `provincias` (
`ID` int(11) NOT NULL auto_increment,
`provincia` varchar(255) NOT NULL default ”,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=53 ;


– Volcar la base de datos para la tabla `provincias`

INSERT INTO `provincias` VALUES (1, ‘ÁLAVA’);
INSERT INTO `provincias` VALUES (2, ‘ALBACETE’);
INSERT INTO `provincias` VALUES (3, ‘ALICANTE’);
INSERT INTO `provincias` VALUES (4, ‘ALMERÍA’);
INSERT INTO `provincias` VALUES (5, ‘ASTURIAS’);
INSERT INTO `provincias` VALUES (6, ‘ÁVILA’);
INSERT INTO `provincias` VALUES (7, ‘BADAJOZ’);
INSERT INTO `provincias` VALUES (8, ‘BARCELONA’);
INSERT INTO `provincias` VALUES (9, ‘BURGOS’);
INSERT INTO `provincias` VALUES (10, ‘CÁCERES’);
INSERT INTO `provincias` VALUES (11, ‘CÁDIZ’);
INSERT INTO `provincias` VALUES (12, ‘CANTABRIA’);
INSERT INTO `provincias` VALUES (13, ‘CASTELLÓN’);
INSERT INTO `provincias` VALUES (14, ‘CEUTA’);
INSERT INTO `provincias` VALUES (15, ‘CIUDAD REAL’);
INSERT INTO `provincias` VALUES (16, ‘CÓRDOBA’);
INSERT INTO `provincias` VALUES (17, ‘CUENCA’);
INSERT INTO `provincias` VALUES (18, ‘GIRONA’);
INSERT INTO `provincias` VALUES (19, ‘GRANADA’);
INSERT INTO `provincias` VALUES (20, ‘GUADALAJARA’);
INSERT INTO `provincias` VALUES (21, ‘GUIPÚZCOA’);
INSERT INTO `provincias` VALUES (22, ‘HUELVA’);
INSERT INTO `provincias` VALUES (23, ‘HUESCA’);
INSERT INTO `provincias` VALUES (24, ‘ISLAS BALEARES’);
INSERT INTO `provincias` VALUES (25, ‘JAÉN’);
INSERT INTO `provincias` VALUES (26, ‘LA CORUÑA’);
INSERT INTO `provincias` VALUES (27, ‘LA RIOJA’);
INSERT INTO `provincias` VALUES (28, ‘LAS PALMAS’);
INSERT INTO `provincias` VALUES (29, ‘LEÓN’);
INSERT INTO `provincias` VALUES (30, ‘LLEIDA’);
INSERT INTO `provincias` VALUES (31, ‘LUGO’);
INSERT INTO `provincias` VALUES (32, ‘MADRID’);
INSERT INTO `provincias` VALUES (33, ‘MÁLAGA’);
INSERT INTO `provincias` VALUES (34, ‘MELILLA’);
INSERT INTO `provincias` VALUES (35, ‘MURCIA’);
INSERT INTO `provincias` VALUES (36, ‘NAVARRA’);
INSERT INTO `provincias` VALUES (37, ‘ORENSE’);
INSERT INTO `provincias` VALUES (38, ‘PALENCIA’);
INSERT INTO `provincias` VALUES (39, ‘PONTEVEDRA’);
INSERT INTO `provincias` VALUES (40, ‘SALAMANCA’);
INSERT INTO `provincias` VALUES (41, ‘SANTA CRUZ DE TENERIFE’);
INSERT INTO `provincias` VALUES (42, ‘SEGOVIA’);
INSERT INTO `provincias` VALUES (43, ‘SEVILLA’);
INSERT INTO `provincias` VALUES (44, ‘SORIA’);
INSERT INTO `provincias` VALUES (45, ‘TARRAGONA’);
INSERT INTO `provincias` VALUES (46, ‘TERUEL’);
INSERT INTO `provincias` VALUES (47, ‘TOLEDO’);
INSERT INTO `provincias` VALUES (48, ‘VALENCIA’);
INSERT INTO `provincias` VALUES (49, ‘VALLADOLID’);
INSERT INTO `provincias` VALUES (50, ‘VIZCAYA’);
INSERT INTO `provincias` VALUES (51, ‘ZAMORA’);
INSERT INTO `provincias` VALUES (52, ‘ZARAGOZA’);

victor comenta:
viernes 21 de abril de 2006 a las 7:13 pm

me gustaria tener un listado de todos los códigos postales de españa. el de aguimes es el 35260 en la provincia de las palmas de gran canaria. y ¿los demás?……. gracias

elena comenta:
viernes 21 de abril de 2006 a las 10:23 pm

Hola Manuel

He intentado bajarme el codigo completo, pero me da un error.
¿Esta correcto el codigo?
¿Como es que no me lo puedo bajar?

Saludos

manuel comenta:
viernes 21 de abril de 2006 a las 9:58 am

Hola,

acabo de probar el enlace y funciona sin problemas ¿qué error te da?

Juanan comenta:
viernes 21 de abril de 2006 a las 9:22 pm

Yo he metido en MS Access 97 una tabla con todas las poblaciones de España, con su cód. postal y su código INE (Instituto Nacional de Estadística).

Si alguien lo quiere, que diga dónde lo puedo colgar y lo cuelgo.

Eso sí, sólo están las poblaciones de cód. postal único, es decir, los que tienen más de uno dependiendo de la calle no están.

Si alguien tiene esa parte, que lo pase y lo incorporo.

Guillermo comenta:
viernes 21 de abril de 2006 a las 5:46 pm

Tu página me ha sacado de un apuro; necesitaba un código postal con urgencia. Muchas gracias. Te la he insertado en el directorio de enlaces de mi web, INDAGA.net. Es lo menos que podía hacer. Gracias otra vez.
Salu2,

Guillermo

manuel comenta:
viernes 21 de abril de 2006 a las 5:50 pm

Gracias a ti, Guilermo ;)

JOSE comenta:
viernes 21 de abril de 2006 a las 3:50 pm

Estaba buscando el código postal de una calle de la Manga (Murcia), pero solo aparece la Manga del Mar menor, que no es la misma Manga a que me refiero, porque la que busco es la que llaman bulgarmente Manga del Mar Mayor, que está pasando por Cabo de Palos.
He mirado en las páginas de correos y telégrafos, he buscado por “guia de códigos”, pero en ningún lugar he tenido éxito para sacar en concreto la información, todo era para ahorrar el ir hasta correos a ojear el libro de códigos que allí disponen para el público.
Mi comentario que no otro, es que es una gran vergüenza que con tantos medios en un país que se supone desarrollado, exista tanta falta de información y de sencillez. Con lo poco que cuesta colgar tal cual las páginas del librito de correos en internet para que uno se abastezca sencillamente. Estamos carentes de gente que cumpla con su deber n la administración. A ver si apartir de ahora alguien lee este articulo y se pone manos a la obra para ordenar a quien corresponda que cumpla con su labor.

Deja tu comentario