diff --git a/lib/clabe.rb b/lib/clabe.rb index c437ba7..0449b3c 100644 --- a/lib/clabe.rb +++ b/lib/clabe.rb @@ -148,11 +148,8 @@ module Clabe "024" => "Rodolfo Sanchez T. MX-BCN", "025" => "San Felipe MX-BCN", "026" => "San Quintin MX-BCN", - "027" => "Tecate MX-BCN", - "027" => "Tijuana", - "028" => "La Mesa", - "028" => "Playas de Rosarito MX-BCN", - "028" => "Tijuana", # see first occurrence at 27 + "027" => "Tecate MX-BCN, Tijuana", + "028" => "La Mesa, Playas de Rosarito MX-BCN, Tijuana", "040" => "La Paz MX-BCS", "041" => "Cabo San Lucas MX-BCS", "042" => "Ciudad Constitución MX-BCS", @@ -169,10 +166,8 @@ module Clabe "055" => "Hopelchen MX-CAM", "056" => "Palizada MX-CAM", "057" => "Seybaplaya MX-CAM", - "060" => "Gómez Palacio", - "060" => "Torreón MX-COA", + "060" => "Gómez Palacio, Torreón MX-COA", "061" => "Abasolo MX-COA", - "062" => "Acuña MX-COA", "062" => "Ciudad Acuña", "063" => "Allende MX-COA", "064" => "Francisco I. Madero MX-COA", @@ -184,7 +179,6 @@ module Clabe "070" => "Muzquiz MX-COA", "071" => "Nava MX-COA", "072" => "Nueva Rosita", - "072" => "Nva Rosita MX-COA", "073" => "Palau MX-COA", "074" => "Parras de la Fuente MX-COA", "075" => "Piedras Negras MX-COA", @@ -203,8 +197,7 @@ module Clabe "096" => "Queseria MX-COL", "097" => "Tecomán MX-COL", "098" => "Villa de Alvarez MX-COL", - "100" => "Terán", - "100" => "Tuxtla Gutiérrez MX-CHP", + "100" => "Terán, Tuxtla Gutiérrez MX-CHP", "101" => "Acapetahua MX-CHP", "102" => "Angel Albino Corzo MX-CHP", "103" => "Arriaga MX-CHP", @@ -213,8 +206,7 @@ module Clabe "106" => "Catazaja MX-CHP", "107" => "Cintalapa MX-CHP", "108" => "Ciudad Hidalgo MX-CHP", - "109" => "Comitán de Dominguez MX-CHP", - "109" => "Villa Las Rosas", + "109" => "Comitán de Dominguez MX-CHP, Villa Las Rosas", "110" => "Copainala MX-CHP", "111" => "Chiapa de Corso MX-CHP", "112" => "Chicomuselo MX-CHP", @@ -243,58 +235,33 @@ module Clabe "135" => "Tonala MX-CHP", "136" => "Tuxtla Chico MX-CHP", "137" => "Venustiano Carranza MX-CHP", - "138" => "Villa Corzo MX-CHP", "138" => "Villa Flores", "140" => "Yajalón MX-CHP", - "150" => "Chihuahua MX-CHH", - "150" => "Ciudad Delicias", + "150" => "Chihuahua MX-CHH, Ciudad Delicias", "151" => "Ahumada MX-CHH", - "152" => "Anahuac MX-CHH", "152" => "Ciudad Anáhuac", "153" => "Ascension MX-CHH", "154" => "Buenaventura MX-CHH", - "155" => "Camargo MX-CHH", "155" => "Ciudad Camargo", "156" => "Casas Grandes MX-CHH", "157" => "Creel MX-CHH", "158" => "Ciudad Cuauhtémoc", - "158" => "Cuauhtemoc MX-CHH", "159" => "Gomez Farias MX-CHH", "160" => "Guachochi MX-CHH", "161" => "Ciudad Guerrero", - "161" => "Guerrero MX-CHH", - "162" => "Hidalgo del Parral MX-CHH", "162" => "Parral", "163" => "Ciudad Jiménez MX-CHH", "164" => "Ciudad Juárez MX-CHH", "165" => "Ciudad Madera", - "165" => "Madera MX-CHH", "166" => "Meoqui MX-CHH", "167" => "El Molino de Namiquipa", - "167" => "Namiquipa MX-CHH", "168" => "Nuevo Casas Grandes", - "168" => "Nvo Casas Grandes MX-CHH", "169" => "Ojinaga MX-CHH", "170" => "Praxedis G. Guerrero MX-CHH", "171" => "Puerto Palomas MX-CHH", "172" => "Santa Barbara MX-CHH", "173" => "Saucillo MX-CHH", - "180" => "Atizapan", - "180" => "Chalco", - "180" => "Ciudad de México MX-CMX", - "180" => "Coacalco", - "180" => "Cuautitlán Izcalli", - "180" => "Ecatepec", - "180" => "Huehuetoca", - "180" => "Huixquilucan", - "180" => "Ixtapaluca", - "180" => "Los Reyes la Paz", - "180" => "Naucalpan", - "180" => "Nezahualcóyotl", - "180" => "Tecamac", - "180" => "Teotihuacán", - "180" => "Texcoco", - "180" => "Tlalnepantla", + "180" => "Atizapan, Chalco, Ciudad de México MX-CMX, Coacalco, Cuautitlán, Cuautitlán Izcalli, Ecatepec, Huehuetoca, Huixquilucan, Ixtapaluca, Los Reyes la Paz, Naucalpan, Nezahualcóyotl, Tecamac, Teotihuacán, Texcoco, Tlalnepantla", "190" => "Durango MX-DUR", "191" => "Canatlan MX-DUR", "192" => "Cuencame MX-DUR", @@ -335,8 +302,7 @@ module Clabe "234" => "Salvatierra MX-GUA", "235" => "San Diego de la Union MX-GUA", "236" => "San Felipe Progreso MX-GUA", - "237" => "Purísima de Bustos", - "237" => "San Francisco del Rincoón MX-GUA", + "237" => "Purísima de Bustos, San Francisco del Rincoón MX-GUA", "238" => "San José Iturbide MX-GUA", "239" => "San Luis de la Paz MX-GUA", "240" => "San Miguel de Allende MX-GUA", @@ -361,11 +327,9 @@ module Clabe "269" => "Chichihualco MX-GRO", "270" => "Chilapa de Alvarez MX-GRO", "271" => "Huitzuco MX-GRO", - "272" => "Iguala MX-GRO", - "272" => "La Sabana", + "272" => "Iguala MX-GRO, La Sabana", "273" => "Olinala MX-GRO", - "274" => "Cuajinicuilapa", - "274" => "Ometepec MX-GRO", + "274" => "Cuajinicuilapa, Ometepec MX-GRO", "275" => "San Marcos MX-GRO", "276" => "Taxco de Alarcon MX-GRO", "277" => "Petatlan MX-GRO", @@ -378,8 +342,7 @@ module Clabe "291" => "Actopan MX-HID", "292" => "Apam MX-HID", "293" => "Atotonilco el Grande MX-HID", - "294" => "Ciudad Sahagún MX-HID", - "294" => "Teocaltiche", + "294" => "Ciudad Sahagún MX-HID, Teocaltiche", "295" => "Cuautepec de Hinojosa MX-HID", "296" => "Huejutla de Reyes MX-HID", "297" => "Huichapan MX-HID", @@ -400,12 +363,7 @@ module Clabe "312" => "Tulancingo MX-HID", "313" => "Zacualtipán MX-HID", "314" => "Zimapán MX-HID", - "320" => "El Salto MX-JAL", - "320" => "Guadalajara", - "320" => "San Pedro Tlaquepaque", - "320" => "Tlajomulco", - "320" => "Tonala", - "320" => "Zapopan", + "320" => "El Salto MX-JAL, Guadalajara, San Pedro Tlaquepaque, Tlajomulco, Tonala, Zapopan", "321" => "Acatic MX-JAL", "322" => "Acatlan de Juarez MX-JAL", "323" => "Ahualulco de Mercado MX-JAL", @@ -416,12 +374,10 @@ module Clabe "328" => "Arenal MX-JAL", "329" => "Atenguillo MX-JAL", "330" => "Atotonilco el Alto MX-JAL", - "331" => "Atequiza", - "331" => "Atotonilquillo MX-JAL", + "331" => "Atequiza, Atotonilquillo MX-JAL", "332" => "Atoyac MX-JAL", "333" => "Autlán de Navarro MX-JAL", - "334" => "Ayotlan MX-JAL", - "334" => "Azteca", + "334" => "Ayotlan MX-JAL, Azteca", "335" => "Ayutla MX-JAL", "336" => "Bajio de San Jose MX-JAL", "337" => "Belen del Refugio MX-JAL", @@ -462,10 +418,7 @@ module Clabe "372" => "Pegueros MX-JAL", "373" => "Pihuamo MX-JAL", "374" => "Poncitlan MX-JAL", - "375" => "Las Juntas", - "375" => "Nuevo Vallarta", - "375" => "Pitillal", - "375" => "Puerto Vallarta MX-JAL", + "375" => "Las Juntas, Nuevo Vallarta, Pitillal, Puerto Vallarta MX-JAL", "376" => "Purificacion MX-JAL", "377" => "Quitupan MX-JAL", "378" => "San Ignacio Cerro G. MX-JAL", @@ -495,7 +448,6 @@ module Clabe "402" => "Totatiche MX-JAL", "403" => "Tototlán MX-JAL", "404" => "Túxpam", - "404" => "Tuxpan MX-JAL", "405" => "Union de San Antonio MX-JAL", "406" => "Union de Tula MX-JAL", "407" => "Valle de Guadalupe MX-JAL", @@ -525,8 +477,7 @@ module Clabe "434" => "Ixtlahuaca MX-MEX", "435" => "Jilotepec MX-MEX", "436" => "Jocotitlan MX-MEX", - "437" => "Chimalhuacan MX-MEX", - "437" => "La Paz (Reyes Acaq.) MX-MEX", + "437" => "Chimalhuacan MX-MEX, La Paz (Reyes Acaq.) MX-MEX", "438" => "Lerma MX-MEX", "439" => "Luvianos MX-MEX", "440" => "Malinalco MX-MEX", @@ -540,11 +491,9 @@ module Clabe "448" => "Temascaltepec MX-MEX", "449" => "Temoaya MX-MEX", "450" => "Tenancingo MX-MEX", - "451" => "Tenago del Valle", - "451" => "Tenango de Arista MX-MEX", + "451" => "Tenago del Valle, Tenango de Arista MX-MEX", "452" => "Texcaltitlan MX-MEX", "453" => "Santiago Tiangistenco", - "453" => "Tianguistenco MX-MEX", "454" => "Tonatico MX-MEX", "455" => "Tultepec MX-MEX", "456" => "Tultitlán MX-MEX", @@ -587,7 +536,6 @@ module Clabe "499" => "Maravatío MX-MIC", "500" => "San Jose de Gracia MX-MIC", "501" => "Nueva Italia", - "501" => "Nva Italia de Ruiz MX-MIC", "502" => "Pajacuaran MX-MIC", "503" => "Panindicuaro MX-MIC", "504" => "Paracho MX-MIC", @@ -626,8 +574,7 @@ module Clabe "537" => "Zitácuaro MX-MIC", "540" => "Cuernavaca MX-MOR", "541" => "Axochiapan MX-MOR", - "542" => "Cuautla MX-MOR", - "542" => "Oaxtepec, Morelos", + "542" => "Cuautla MX-MOR, Oaxtepec, Morelos", "543" => "Jiutepec MX-MOR", "544" => "Jojutla MX-MOR", "545" => "Puente de Ixtla MX-MOR", @@ -656,14 +603,7 @@ module Clabe "575" => "Túxpam MX-NAY", "576" => "Villa Hidalgo MX-NAY", "577" => "Xalisco MX-NAY", - "580" => "Apodaca MX-NLE", - "580" => "Cadereyta", - "580" => "Ciudad Guadalupe", - "580" => "General Escobedo", - "580" => "Monterrey", - "580" => "San Nicolás de los Garza", - "580" => "San Pedro Garza García", - "580" => "Santa Catarina", + "580" => "Apodaca MX-NLE, Cadereyta, Ciudad Guadalupe, General Escobedo, Monterrey, San Nicolás de los Garza, San Pedro Garza García, Santa Catarina", "581" => "Abasolo MX-NLE", "582" => "Agualeguas MX-NLE", "583" => "Allende MX-NLE", @@ -684,14 +624,11 @@ module Clabe "598" => "Pesqueria MX-NLE", "599" => "Sabinas Hidalgo MX-NLE", "600" => "Salinas Victoria MX-NLE", - "601" => "El Cercado", - "601" => "Santiago MX-NLE", - "601" => "Villa de Santiago", + "601" => "El Cercado, Santiago MX-NLE, Villa de Santiago", "610" => "Oaxaca MX-OAX", "611" => "Asuncion Nochixtlan MX-OAX", "612" => "Guelatao MX-OAX", "613" => "Heroica Cd de Tlaxiaco MX-OAX", - "613" => "Tlaxiaco", "614" => "Huajuapan de León MX-OAX", "615" => "Huautla MX-OAX", "616" => "Ixtepec MX-OAX", @@ -705,37 +642,26 @@ module Clabe "624" => "Puerto Escondido MX-OAX", "625" => "Putla MX-OAX", "626" => "Salina Cruz MX-OAX", - "627" => "Lagunas", - "627" => "San Andres Lagunas MX-OAX", - "628" => "San Juan Bautista T. MX-OAX", - "628" => "Tuxtepec", + "627" => "Lagunas,San Andres Lagunas MX-OAX", + "628" => "San Juan Bautista T. MX-OAX, Tuxtepec", "629" => "San Pedro Mixtepec MX-OAX", "630" => "Pochutla", - "630" => "San Pedro Pochutla MX-OAX", "631" => "San Pedro Tapanatepec MX-OAX", "632" => "Santa Lucía del Camino MX-OAX", "633" => "Santa Maria del Tule MX-OAX", "634" => "Bahías de Huatulco", - "634" => "Santa Maria Huatulco MX-OAX", "635" => "Santiago Juxtlahuaca MX-OAX", "636" => "Pinotepa Nacional", - "636" => "Santiago Pinotepa Nal MX-OAX", - "637" => "Sto Domingo Tehuantepec MX-OAX", "637" => "Tehuantepec", "638" => "Tlacolula D Matamoros MX-OAX", "639" => "Villa de Tamazulapam MX-OAX", "640" => "Zimatlán MX-OAX", - "650" => "Cholula", - "650" => "Cuautlancingo MX-PUE", - "650" => "La Resurrección", - "650" => "Puebla", - "650" => "San Baltazar Campeche", + "650" => "Cholula, Cuautlancingo MX-PUE, La Resurrección, Puebla, San Baltazar Campeche", "651" => "Acatlan MX-PUE", "652" => "Acatzingo MX-PUE", "653" => "Amozoc MX-PUE", "654" => "Atlixco MX-PUE", - "655" => "Ciudad Serdan MX-PUE", - "655" => "Los Heroes de Puebla MX-PUE", + "655" => "Ciudad Serdan MX-PUE, Los Heroes de Puebla MX-PUE", "656" => "Cuetzalan MX-PUE", "657" => "Chiautla MX-PUE", "658" => "Chignahuapan MX-PUE", @@ -748,21 +674,16 @@ module Clabe "665" => "Nvo Necaxa MX-PUE", "666" => "Rafael Lara Grajales MX-PUE", "667" => "San Martín Texmelucan MX-PUE", - "668" => "San Felipe Hueyotlipan", - "668" => "Sto Tomas Hueyotlipan MX-PUE", + "668" => "San Felipe Hueyotlipan, Sto Tomas Hueyotlipan MX-PUE", "669" => "Tecamachalco MX-PUE", "670" => "Tehuacán MX-PUE", - "671" => "San Lorenzo", - "671" => "Tepeaca MX-PUE", + "671" => "San Lorenzo, Tepeaca MX-PUE", "672" => "Teziutlán MX-PUE", "673" => "Tlatlauquitepec MX-PUE", "674" => "Xicotepec de Juárez MX-PUE", "675" => "Zacapoaxtla MX-PUE", "676" => "Zacatlán MX-PUE", - "680" => "El Pueblito Correg. MX-QUE", - "680" => "Pedro Escobedo", - "680" => "Querétaro", - "680" => "Villa Corregidora", + "680" => "El Pueblito Correg. MX-QUE, Pedro Escobedo, Querétaro, Villa Corregidora", "681" => "Amealco MX-QUE", "682" => "Cadereyta MX-QUE", "683" => "Ezequiel Montes MX-QUE", @@ -770,8 +691,7 @@ module Clabe "685" => "San Juan del Río MX-QUE", "686" => "Tequisquiapan MX-QUE", "690" => "Chetumal MX-ROO", - "691" => "Cancún MX-ROO", - "691" => "Col. Puerto Juárez", + "691" => "Cancún MX-ROO, Col. Puerto Juárez", "692" => "Cozumel MX-ROO", "693" => "Isla Mujeres MX-ROO", "694" => "Playa del Carmen MX-ROO", @@ -811,8 +731,7 @@ module Clabe "740" => "Guamúchil MX-SIN", "741" => "Guasave MX-SIN", "742" => "La Cruz de Elota MX-SIN", - "743" => "Los Mochis MX-SIN", - "743" => "Topolobampo", + "743" => "Los Mochis MX-SIN, Topolobampo", "744" => "Mazatlán MX-SIN", "745" => "Mocorito MX-SIN", "746" => "Navolato MX-SIN", @@ -827,12 +746,10 @@ module Clabe "764" => "Baviacora MX-SON", "765" => "Caborca MX-SON", "766" => "Cananea MX-SON", - "767" => "Ciudad Obregón MX-SON", - "767" => "Esperanza", + "767" => "Ciudad Obregón MX-SON, Esperanza", "768" => "Cumpas MX-SON", "769" => "Empalme MX-SON", - "770" => "Guaymas MX-SON", - "770" => "San Carlos", + "770" => "Guaymas MX-SON, San Carlos", "771" => "Huatabampo MX-SON", "772" => "Luis B. Sanchez MX-SON", "773" => "Magdalena de Kino MX-SON", @@ -846,11 +763,9 @@ module Clabe "781" => "Santa Ana MX-SON", "782" => "Ures MX-SON", "783" => "Villa Juarez (Irrigacion) MX-SON", - "790" => "Tamulte", - "790" => "Villa Hermosa MX-TAB", + "790" => "Tamulte, Villa Hermosa MX-TAB", "791" => "Balancan MX-TAB", "792" => "Cárdenas", - "792" => "Cardenas MX-TAB", "793" => "Ciudad Pemex MX-TAB", "794" => "Comalcalco MX-TAB", "795" => "Cunduacan MX-TAB", @@ -869,8 +784,7 @@ module Clabe "810" => "Ciudad Victoria MX-TAM", "811" => "Altamira MX-TAM", "812" => "Camargo MX-TAM", - "813" => "Ciudad Madero MX-TAM", - "813" => "Tampico", + "813" => "Ciudad Madero MX-TAM, Tampico", "814" => "Ciudad Mante MX-TAM", "815" => "Ciudad Miguel Aleman MX-TAM", "816" => "Gonzalez MX-TAM", @@ -878,10 +792,7 @@ module Clabe "818" => "Matamoros MX-TAM", "819" => "Mier MX-TAM", "820" => "Nva Ciudad Guerrero MX-TAM", - "821" => "Colombia", - "821" => "Nuevo Laredo MX-TAM", - "822" => "Hidalgo MX-TAM", - "822" => "Reynosa", + "821" => "Colombia, Nuevo Laredo MX-TAM, Hidalgo MX-TAM, Reynosa", "823" => "Río Bravo MX-TAM", "824" => "San Fernando MX-TAM", "825" => "Soto la Marina MX-TAM", @@ -891,7 +802,6 @@ module Clabe "831" => "Amaxac de Guerrero MX-TLA", "832" => "Apizaco MX-TLA", "833" => "Calpulalpan MX-TLA", - "834" => "Chiautempan MX-TLA", "834" => "Santa Ana Chiautempan", "835" => "Huamantla MX-TLA", "836" => "Papalotla MX-TLA", @@ -899,7 +809,6 @@ module Clabe "838" => "Tlaxco MX-TLA", "839" => "Zacatelco MX-TLA", "840" => "Jalapa", - "840" => "Xalapa MX-VER", "841" => "Acayucan MX-VER", "842" => "Adalberto Tejeda MX-VER", "843" => "Agua Dulce MX-VER", @@ -930,11 +839,9 @@ module Clabe "869" => "Jáltipan de Morelos MX-VER", "870" => "Jesus Carranza MX-VER", "871" => "Juan Rodríguez Clara MX-VER", - "872" => "La Antigua MX-VER", - "872" => "Villa José Cardel", + "872" => "La Antigua MX-VER, Villa José Cardel", "873" => "Las Choapas MX-VER", "874" => "Lerdo de Tejada MX-VER", - "875" => "Los Naranjos MX-VER", "875" => "Naranjos", "876" => "Martínez de la Torre MX-VER", "877" => "Minatitlán MX-VER", @@ -954,8 +861,7 @@ module Clabe "891" => "San Rafael MX-VER", "892" => "Soledad de Doblado MX-VER", "893" => "Tamiahua MX-VER", - "894" => "Platón Sánchez", - "894" => "Tantoyuca MX-VER", + "894" => "Platón Sánchez, Tantoyuca MX-VER", "895" => "Tempoal de Sanchez MX-VER", "896" => "Teocelo MX-VER", "897" => "Tezonapa MX-VER", @@ -965,10 +871,8 @@ module Clabe "901" => "Tlapacoyan MX-VER", "902" => "Tres Valles MX-VER", "903" => "Túxpam de Rodríguez Cano", - "903" => "Tuxpan MX-VER", "904" => "Vega de Alatorre MX-VER", - "905" => "Ciudad Industrial Framboyan", - "905" => "Veracruz MX-VER", + "905" => "Ciudad Industrial Framboyan, Veracruz MX-VER", "906" => "Xico MX-VER", "910" => "Mérida MX-YUC", "911" => "Izamal MX-YUC", @@ -976,7 +880,6 @@ module Clabe "913" => "Motul MX-YUC", "914" => "Oxkutzcab MX-YUC", "915" => "Progreso", - "915" => "Puerto Progreso MX-YUC", "916" => "Tekax MX-YUC", "917" => "Ticul MX-YUC", "918" => "Tizimín MX-YUC", @@ -1015,10 +918,9 @@ module Clabe "960" => "Victor Rosales MX-ZAC", "961" => "Villa Gonzalez Ortega MX-ZAC", "962" => "Villanueva MX-ZAC", - "974" => "Crédito Automotriz", - "975" => "Tarjeta de Crédito", "969" => "Cuenta de fondos de pago electrónico", - "974" => "Crédito personal" + "974" => "Crédito Automotriz, Crédito personal", + "975" => "Tarjeta de Crédito" }.freeze CLABE_WEIGHT_FACTOR_MAP = [3, 7, 1].freeze diff --git a/spec/clabe_spec.rb b/spec/clabe_spec.rb index 2b004fe..6efc033 100644 --- a/spec/clabe_spec.rb +++ b/spec/clabe_spec.rb @@ -6,8 +6,8 @@ { clabe: '00000000000000000a', is_valid: false, bank_tag: nil, city: nil }, { clabe: '002010077777777779', is_valid: false, bank_tag: nil, city: nil }, { clabe: '000000000000000000', is_valid: false, bank_tag: nil, city: nil }, - { clabe: '002114016003269412', is_valid: true, bank_tag: 'BANAMEX', city: 'Huixtla', code: '002' }, - { clabe: '032180000118359719', is_valid: true, bank_tag: 'IXE', city: 'Atizapan, Chalco, Ciudad de México, Coacalco, Cuautitlán, Cuautitlán Izcalli, Ecatepec, Huehuetoca, Huixquilucan, Ixtapaluca, Los Reyes La Paz, Naucalpan, Nezahualcóyotl, Tecamac, Teotihuacán, Texcoco, Tlalnepantla', code: '032' } + { clabe: '002114016003269412', is_valid: true, bank_tag: 'BANAMEX', city: 'Huixtla MX-CHP', code: '002' }, + { clabe: '032180000118359719', is_valid: true, bank_tag: 'IXE', city: 'Atizapan, Chalco, Ciudad de México MX-CMX, Coacalco, Cuautitlán, Cuautitlán Izcalli, Ecatepec, Huehuetoca, Huixquilucan, Ixtapaluca, Los Reyes la Paz, Naucalpan, Nezahualcóyotl, Tecamac, Teotihuacán, Texcoco, Tlalnepantla', code: '032' } ] it 'validate' do