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 ;)

Publicado por

manuel

Me dedico al desarrollo de aplicaciones. Principalmente trabajo con XHTML, CSS, Javascript, XML, JSON, PHP, MySQL, Linux/MacOS X y Flash actionscript. Intento siempre trabajar con estándares y simplificar el desarrollo y las aplicaciones finales con el objetivo de orientarlas al usuario (que sean útiles y faciliten el trabajo).

25 comentarios sobre “Provincias y localidades de España / Códigos postales”

  1. 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!

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

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

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

  9. 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’);

  10. 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

  11. 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

  12. 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.

  13. 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

  14. 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.

  15. Hola: Tengo los codigos de las calles de Huesca capital. Por mi trabajo lo necesito todos los días. Pero la ciudad ha crecido y mi listado no. Necesitaria actualizarlo pues hay bastantes calles nuevas. ¿alguien sabe donde puedo hacerlo? Gracias anticipadas

  16. Hola
    Este mensaje es para juanjo, solo comentarte que hay varios codigos que estan mal, Ceuta es el 51 y Melilla es el 52, por eso al final sale Zaragoza con el 52 y es el 50 y Madrid sale con el 32 y debe ser el 28
    Posiblemente haya otros mal
    Saludos y hasta pronto
    Juan

  17. Hola de nuevo
    Os envio los codigops correctos

    01;ALAVA/ARABA
    02;ALBACETE
    03;ALICANTE/ALACANT
    04;ALMERÍA
    05;AVILA
    06;BADAJOZ
    07;ILLES BALEARS/I. BALEARES
    08;BARCELONA
    09;BURGOS
    10;CÁCERES
    11;CÁDIZ
    12;CASTELLÓN/CASTELLÓ
    13;CIUDAD REAL
    14;CÓRDOBA
    15;A CORUÑA/LA CORUÑA
    16;CUENCA
    17;GIRONA/GERONA
    18;GRANADA
    19;GUADALAJARA
    20;GUIPUZKOA/GUIPÚZCOA
    21;HUELVA
    22;HUESCA
    23;JAÉN
    24;LEÓN
    25;LLEIDA/LÉRIDA
    26;LA RIOJA
    27;LUGO
    28;MADRID
    29;MÁLAGA
    30;MURCIA
    31;NAVARRA
    32;OURENSE/ORENSE
    33;ASTURIAS
    34;PALENCIA
    35;LAS PALMAS
    36;PONTEVEDRA
    37;SALAMANCA
    38;STA CRUZ DE TENERIFE
    39;CANTABRIA
    40;SEGOVIA
    41;SEVILLA
    42;SORIA
    43;TARRAGONA
    44;TERUEL
    45;TOLEDO
    46;VALENCIA
    47;VALLADOLID
    48;VIZCAYA/BIZKAIA
    49;ZAMORA
    50;ZARAGOZA
    51;CEUTA
    52;MELILLA
    Saludos y hasta otra
    Juan

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *