UNPKG

@malga-checkout-full/core

Version:
1,736 lines (1,709 loc) 124 kB
import { c as createCommonjsModule, a as commonjsGlobal, g as getDefaultExportFromCjs } from './_commonjsHelpers-ba3f0406.js'; class ValidationError extends Error { constructor(msg) { super(msg); this.name = 'ValidationError'; } } class InvalidFormat extends ValidationError { constructor(msg = 'The number has an invlidad format.') { super(msg); this.name = 'InvalidFormat'; } } class InvalidChecksum extends ValidationError { constructor(msg = "The number number's checksum or check digit is invalid.") { super(msg); this.name = 'InvalidChecksum'; } } class InvalidLength extends ValidationError { constructor(msg = 'The number has an invalid length.') { super(msg); this.name = 'InvalidLength'; } } class InvalidComponent extends ValidationError { constructor(msg = 'One of the parts of the number are invalid or unknown.') { super(msg); this.name = 'InvalidComponent'; } } const alphaRE = /^[A-Za-z0-9]+$/; const digitRE = /^[0-9]+$/; function isalpha(value) { return alphaRE.test(value); } function isdigits(value) { return digitRE.test(value); } const mapped = { '-': '-', '\u{00AD}': '-', '\u{00AF}': '-', '\u{02D7}': '-', '\u{058A}': '-', '\u{05BE}': '-', '\u{180A}': '-', '\u{2010}': '-', '\u{2011}': '-', '\u{2012}': '-', '\u{2013}': '-', '\u{2014}': '-', '\u{2015}': '-', '\u{203E}': '-', '\u{2043}': '-', '\u{207B}': '-', '\u{208B}': '-', '\u{2212}': '-', '\u{23AF}': '-', '\u{23BA}': '-', '\u{23BB}': '-', '\u{23BC}': '-', '\u{23BD}': '-', '\u{23E4}': '-', '\u{FF0D}': '-', '\u{FE63}': '-', '\u{FFE3}': '-', '*': '*', '\u{066D}': '*', '\u{070D}': '*', '\u{2055}': '*', '\u{A60E}': '*', '\u{2217}': '*', '\u{22C6}': '*', '\u{204E}': '*', '\u{2731}': '*', '\u{2732}': '*', '\u{2733}': '*', '\u{273A}': '*', '\u{273B}': '*', '\u{273C}': '*', '\u{273D}': '*', '\u{2743}': '*', '\u{2749}': '*', '\u{274A}': '*', '\u{274B}': '*', '\u{FE61}': '*', '\u{FF0A}': '*', ',': ',', '\u{00B8}': ',', '\u{060C}': ',', '\u{066B}': ',', '\u{066C}': ',', '\u{201A}': ',', '\u{2032}': ',', '\u{2E34}': ',', '\u{3001}': ',', '\u{FF0C}': ',', '\u{FE11}': ',', '\u{FE50}': ',', '\u{FE51}': ',', '\u{FF64}': ',', '.': '.', '\u{00B7}': '.', '\u{02D9}': '.', '\u{0387}': '.', '\u{06D4}': '.', '\u{0701}': '.', '\u{0702}': '.', '\u{0830}': '.', '\u{0F0B}': '.', '\u{0F0C}': '.', "\u{1427}": ".", '\u{16EB}': '.', '\u{2219}': '.', '\u{2022}': '.', '\u{2024}': '.', '\u{2027}': '.', '\u{22C5}': '.', '\u{2E31}': '.', '\u{2E33}': '.', '\u{3002}': '.', '\u{30FB}': '.', '\u{FE52}': '.', '\u{FF0E}': '.', '\u{FF65}': '.', '\u{FBB2}': '.', '\u{FBB3}': '.', '\u{10101}': '.', '\u{1091F}': '.', '\u{10A50}': '.', '/': '/', '\u{2044}': '/', '\u{2215}': '/', '\u{29F8}': '/', '\u{FF0F}': '/', '\u{083C}': '/', '\u{27CB}': '/', ':': ':', '\u{1361}': ':', '\u{16EC}': ':', '\u{1804}': ':', '\u{FE13}': ':', '\u{FE30}': ':', '\u{FF1A}': ':', '\u{FE55}': ':', ' ': ' ', '\u{0009}': ' ', '\u{000B}': ' ', '\u{000C}': ' ', '\u{00A0}': ' ', '\u{1680}': ' ', '\u{2000}': ' ', '\u{2001}': ' ', '\u{2002}': ' ', '\u{2003}': ' ', '\u{2004}': ' ', '\u{2005}': ' ', '\u{2006}': ' ', '\u{2007}': ' ', '\u{2008}': ' ', '\u{2009}': ' ', '\u{200A}': ' ', '\u{2028}': ' ', '\u{2029}': ' ', '\u{202F}': ' ', '\u{205F}': ' ', '\u{3000}': ' ', "'": "'", '\u{0060}': "'", '\u{00B4}': "'", "\u{02BE}": "'", "\u{02BF}": "'", "\u{02B9}": "'", "\u{02BB}": "'", "\u{02BC}": "'", "\u{02C8}": "'", "\u{0300}": "'", '\u{0301}': "'", '\u{0312}': "'", '\u{0313}': "'", '\u{055A}': "'", '\u{201B}': "'", '\u{2018}': "'", '\u{2019}': "'", '0': '0', '\u{0660}': '0', '\u{06F0}': '0', '\u{FF10}': '0', '\u{1D7CE}': '0', '\u{1D7D8}': '0', '\u{1D7E2}': '0', '\u{1D7EC}': '0', '\u{1D7F6}': '0', '1': '1', '\u{0661}': '1', '\u{06F1}': '1', '\u{FF11}': '1', '\u{1D7CF}': '1', '\u{1D7D9}': '1', '\u{1D7E3}': '1', '\u{1D7ED}': '1', '\u{1D7F7}': '1', '2': '2', '\u{06F2}': '2', '\u{0662}': '2', '\u{FF12}': '2', '\u{1D7D0}': '2', '\u{1D7DA}': '2', '\u{1D7E4}': '2', '\u{1D7EE}': '2', '\u{1D7F8}': '2', '3': '3', '\u{06F3}': '3', '\u{0663}': '3', '\u{FF13}': '3', '\u{1D7D1}': '3', '\u{1D7DB}': '3', '\u{1D7E5}': '3', '\u{1D7EF}': '3', '\u{1D7F9}': '3', '4': '4', '\u{06F4}': '4', '\u{0664}': '4', '\u{FF14}': '4', '\u{1D7D2}': '4', '\u{1D7DC}': '4', '\u{1D7E6}': '4', '\u{1D7F0}': '4', '\u{1D7FA}': '4', '5': '5', '\u{06F5}': '5', '\u{0665}': '5', '\u{FF15}': '5', '\u{1D7D3}': '5', '\u{1D7DD}': '5', '\u{1D7E7}': '5', '\u{1D7F1}': '5', '\u{1D7FB}': '5', '6': '6', '\u{06F6}': '6', '\u{0666}': '6', '\u{FF16}': '6', '\u{1D7D4}': '6', '\u{1D7DE}': '6', '\u{1D7E8}': '6', '\u{1D7F2}': '6', '\u{1D7FC}': '6', '7': '7', '\u{06F7}': '7', '\u{0667}': '7', '\u{FF17}': '7', '\u{1D7D5}': '7', '\u{1D7DF}': '7', '\u{1D7E9}': '7', '\u{1D7F3}': '7', '\u{1D7FD}': '7', '8': '8', '\u{06F8}': '8', '\u{0668}': '8', '\u{FF18}': '8', '\u{1D7D6}': '8', '\u{1D7E0}': '8', '\u{1D7EA}': '8', '\u{1D7F4}': '8', '\u{1D7FE}': '8', '9': '9', '\u{06F9}': '9', '\u{0669}': '9', '\u{FF19}': '9', '\u{1D7D7}': '9', '\u{1D7E1}': '9', '\u{1D7EB}': '9', '\u{1D7F5}': '9', '\u{1D7FF}': '9', }; function cleanUnicode(value, deletechars = ' ', stripPrefix) { if (typeof value !== 'string') { return ['', new InvalidFormat()]; } const cleaned = [...value] .map(c => { var _a; return (_a = mapped[c]) !== null && _a !== void 0 ? _a : c; }) .filter(c => !deletechars.includes(c)) .join('') .toLocaleUpperCase(); if (stripPrefix && cleaned.startsWith(stripPrefix)) { return [cleaned.substr(stripPrefix.length), null]; } return [cleaned, null]; } function splitAt(value, ...points) { const parts = [0, ...points].map((p, idx) => { const nvalue = idx >= points.length ? value.length : points[idx]; const np = nvalue < 0 ? value.length + nvalue : nvalue; const pp = p < 0 ? value.length + p : p; return value.substr(pp, np - pp); }); return parts.filter(v => v.length !== 0); } function weightedSum(value, { alphabet = '0123456789', reverse = false, weights = [1], modulus = 0, }) { const wlen = weights.length; const numbers = value.split('').map(v => alphabet.indexOf(v)); const weighted = (reverse ? numbers.reverse() : numbers).map((v, idx) => v * weights[idx % wlen]); return weighted.reduce((acc, v) => { let vv = v; while (vv < 0) { vv += modulus; } return (acc + vv) % modulus; }, 0); } function luhnChecksumValidate(value, alphabet = '0123456789') { const parity = value.length % 2; const sum = value .split('') .map(v => alphabet.indexOf(v)) .reduce((acc, val, idx) => { const v = idx % 2 === parity ? val * 2 : val; return acc + (v > 9 ? v - 9 : v); }, 0); return sum % alphabet.length === 0; } function luhnChecksumValue(value, alphabet = '0123456789') { const alen = alphabet.length; return value .split('') .reverse() .map(v => alphabet.indexOf(v)) .reduce((acc, v, idx) => { if (idx % 2 === 0) { return (acc + v) % alen; } return (acc + Math.floor((v * 2) / alen) + ((v * 2) % alen)) % alen; }); } function luhnChecksumDigit(value, alphabet = '0123456789') { const cs = luhnChecksumValue(`${value}${alphabet[0]}`); return alphabet[alphabet.length - cs]; } const verhoeffD = [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], ]; const verhoeffP = [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8], ]; function invArray(array) { return array .split('') .map(v => parseInt(v, 10)) .reverse(); } function verhoeffValidate(array) { const invertedArray = invArray(array); const sum = invertedArray.reduce((c, v, idx) => verhoeffD[c][verhoeffP[idx % 8][v]], 0); return sum === 0; } function modulo(dividentIn, divisor) { let divident = dividentIn; const partLength = 10; while (divident.length > partLength) { const part = divident.substring(0, partLength); divident = (parseInt(part, 10) % divisor) + divident.substring(partLength); } return parseInt(divident, 10) % divisor; } function mod97base10Validate(value) { const alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; let fail = false; const bigValue = value .split('') .map(c => { const idx = alphabet.indexOf(c); if (idx === -1) { fail = true; return ''; } return String(idx); }) .join(''); if (fail) { return false; } return modulo(bigValue, 97) === 1; } function mod11mod10Validate(value) { const sum = value .split('') .map(v => parseInt(v, 10)) .reduce((acc, n) => ((((acc === 0 ? 10 : acc) * 2) % 11) + n) % 10, 5); return sum === 1; } function isValidDate(yy, mm, dd) { const yyN = parseInt(yy, 10); const mmN = parseInt(mm, 10) - 1; const ddN = parseInt(dd, 10); if (Number.isNaN(yyN) || Number.isNaN(mmN) || Number.isNaN(ddN)) { return false; } let d; if (yyN < 20) { d = new Date(2000 + yyN, mmN, ddN); } else if (yyN < 100) { d = new Date(1900 + yyN, mmN, ddN); } else { d = new Date(yyN, mmN, ddN); } if (Number.isNaN(d.getFullYear())) { return false; } if (d.getDate() !== ddN || d.getMonth() !== mmN) { return false; } return true; } function isValidDateCompactYYMMDD(yymmdd) { const [year, mon, day] = splitAt(yymmdd, 2, 4); return isValidDate(year, mon, day); } function isValidDateCompactDDMMYY(ddmmyy) { const [day, mon, year] = splitAt(ddmmyy, 2, 4); return isValidDate(year, mon, day); } function isValidDateCompactYYYYMMDD(yyyymmdd) { const [year, mon, day] = splitAt(yyyymmdd, 4, 6); return isValidDate(year, mon, day); } function clean$6(input) { return cleanUnicode(input, ' -'); } const impl$d = { name: 'Bosnia Unique Master Citizen Number', localName: 'Jedinstveni matični broj građana', abbreviation: 'JMBG', compact(input) { const [value, err] = clean$6(input); if (err) { throw err; } return value; }, format(input) { const [value] = clean$6(input); return value; }, validate(input) { const [value, error] = clean$6(input); if (error) { return { isValid: false, error }; } if (value.length !== 13) { return { isValid: false, error: new InvalidLength() }; } if (!isdigits(value)) { return { isValid: false, error: new InvalidFormat() }; } const [front, check] = splitAt(value, 12); const sum = 11 - weightedSum(front, { modulus: 11, weights: [7, 6, 5, 4, 3, 2, 7, 6, 5, 4, 3, 2], }); if (String(sum % 10) !== check) { return { isValid: false, error: new InvalidChecksum() }; } return { isValid: true, compact: value, isIndividual: true, isCompany: false, }; }, }; const { name: name$d, localName: localName$d, abbreviation: abbreviation$d, validate: validate$d, format: format$d, compact: compact$d, } = impl$d; const jmbg$4 = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$d, localName: localName$d, abbreviation: abbreviation$d, validate: validate$d, format: format$d, compact: compact$d }); function clean$5(input) { const [v, err] = cleanUnicode(input, ' -'); if (err) { return ['', err]; } if (v.startsWith('CL')) { return [v.substr(2), null]; } return [v, null]; } const impl$c = { name: 'Chilean National Tax Number', localName: 'Rol Único Tributario ', abbreviation: 'RUT', compact(input) { const [value, err] = clean$5(input); if (err) { throw err; } return value; }, format(input) { const [value] = clean$5(input); const [a, b, c, d] = splitAt(value, 2, 5, 8); return `${a}.${b}.${c}-${d}`; }, validate(input) { const [value, error] = clean$5(input); if (error) { return { isValid: false, error }; } if (value.length !== 8 && value.length !== 9) { return { isValid: false, error: new InvalidLength() }; } const [front, check] = splitAt(value, value.length - 1); if (!isdigits(front)) { return { isValid: false, error: new InvalidComponent() }; } const sum = weightedSum(front, { reverse: true, weights: [9, 8, 7, 6, 5, 4, 9, 8, 7], modulus: 11, }); const digit = '0123456789K'[sum]; if (check !== digit) { return { isValid: false, error: new InvalidChecksum() }; } return { isValid: true, compact: value, isIndividual: true, isCompany: true, }; }, }; const { name: name$c, localName: localName$c, abbreviation: abbreviation$c, validate: validate$c, format: format$c, compact: compact$c, } = impl$c; const rut = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$c, localName: localName$c, abbreviation: abbreviation$c, validate: validate$c, format: format$c, compact: compact$c }); const impl$b = Object.assign(Object.assign({}, rut), { name: 'Chilean National Identification Number', localName: 'Rol Único Nacional ', abbreviation: 'RUN' }); const { name: name$b, localName: localName$b, abbreviation: abbreviation$b, validate: validate$b, format: format$b, compact: compact$b, } = impl$b; const run = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$b, localName: localName$b, abbreviation: abbreviation$b, validate: validate$b, format: format$b, compact: compact$b }); function clean$4(input) { return cleanUnicode(input, ' /'); } const impl$a = { name: 'Czech Birth Number', localName: 'Rodné číslo', abbreviation: 'RČ', compact(input) { const [value, err] = clean$4(input); if (err) { throw err; } return value; }, format(input) { const [value] = clean$4(input); return splitAt(value, 6).join('/'); }, validate(input) { const [value, error] = clean$4(input); if (error) { return { isValid: false, error }; } if (value.length !== 10 && value.length !== 9) { return { isValid: false, error: new InvalidLength() }; } if (!isdigits(value)) { return { isValid: false, error: new InvalidFormat() }; } const [yy, mm, dd] = splitAt(value, 2, 4, 6); const mon = (parseInt(mm, 10) % 50) % 20; let year = parseInt(yy, 10) + 1900; if (value.length === 9) { if (year > 1980) { year -= 100; } if (year > 1953) { return { isValid: false, error: new InvalidComponent() }; } } else if (year < 1954) { year += 100; } if (!isValidDateCompactYYYYMMDD(`${year}${String(mon).padStart(2, '0')}${dd}`)) { return { isValid: false, error: new InvalidComponent() }; } if (value.length === 10) { const [front, check] = splitAt(value, -1); const sum = (parseInt(front, 10) % 11) % (year < 1985 ? 10 : 11); if (String(sum) !== check) { return { isValid: false, error: new InvalidChecksum() }; } } return { isValid: true, compact: value, isIndividual: true, isCompany: false, }; }, }; const { name: name$a, localName: localName$a, abbreviation: abbreviation$a, validate: validate$a, format: format$a, compact: compact$a, } = impl$a; const rc$1 = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$a, localName: localName$a, abbreviation: abbreviation$a, validate: validate$a, format: format$a, compact: compact$a }); function clean$3(input) { return cleanUnicode(input, ' -./,'); } function buildMatch(fmt) { const pattern = fmt.replace(/([FBUP])\1*/g, m => { return `(\\d{${m.length}})`; }); const matcher = new RegExp(`^${pattern}$`); return (value) => { var _a, _b, _c, _d; const m = matcher.exec(value); if (!m) { return { match: false }; } return { match: true, f: (_a = m[1]) !== null && _a !== void 0 ? _a : '', b: (_b = m[2]) !== null && _b !== void 0 ? _b : '', u: (_c = m[3]) !== null && _c !== void 0 ? _c : '', p: (_d = m[4]) !== null && _d !== void 0 ? _d : '', }; }; } function buildMatcher(rfmt, cfmt) { return { region: buildMatch(rfmt), country: buildMatch(cfmt), }; } const REGION_FORMATS = { 'DE-BW': buildMatcher('FFBBBUUUUP', '28FF0BBBUUUUP'), 'DE-BY': buildMatcher('FFFBBBUUUUP', '9FFF0BBBUUUUP'), 'DE-BE': buildMatcher('FFBBBUUUUP', '11FF0BBBUUUUP'), 'DE-BB': buildMatcher('0FFBBBUUUUP', '30FF0BBBUUUUP'), 'DE-HB': buildMatcher('FFBBBUUUUP', '24FF0BBBUUUUP'), 'DE-HH': buildMatcher('FFBBBUUUUP', '22FF0BBBUUUUP'), 'DE-HE': buildMatcher('0FFBBBUUUUP', '26FF0BBBUUUUP'), 'DE-MV': buildMatcher('0FFBBBUUUUP', '40FF0BBBUUUUP'), 'DE-NI': buildMatcher('FFBBBUUUUP', '23FF0BBBUUUUP'), 'DE-NW': buildMatcher('FFFBBBBUUUP', '5FFF0BBBBUUUP'), 'DE-RP': buildMatcher('FFBBBUUUUP', '27FF0BBBUUUUP'), 'DE-SL': buildMatcher('0FFBBBUUUUP', '10FF0BBBUUUUP'), 'DE-SN': buildMatcher('2FFBBBUUUUP', '32FF0BBBUUUUP'), 'DE-ST': buildMatcher('1FFBBBUUUUP', '31FF0BBBUUUUP'), 'DE-SH': buildMatcher('FFBBBUUUUP', '21FF0BBBUUUUP'), 'DE-TH': buildMatcher('1FFBBBUUUUP', '41FF0BBBUUUUP'), }; function findMatch(value) { let result = null; Object.values(REGION_FORMATS).some(({ region, country }) => { const rResult = region(value); if (rResult.match) { result = rResult; return true; } const cResult = country(value); if (cResult.match) { result = cResult; return true; } return false; }); return result; } const impl$9 = { name: 'German Tax Number', localName: 'Steuernummer', abbreviation: ' St.-Nr.', compact(input) { const [value, err] = clean$3(input); if (err) { throw err; } return value; }, format(input) { const [value] = clean$3(input); const match = findMatch(input); if (!match || !match.match) { return value; } return `${match.f}/${match.b}/${match.u} ${match.p}`; }, validate(input) { const [value, error] = clean$3(input); if (error) { return { isValid: false, error }; } if (![10, 11, 13].includes(value.length)) { return { isValid: false, error: new InvalidLength() }; } if (!isdigits(value)) { return { isValid: false, error: new InvalidFormat() }; } const counter = {}; value .substring(0, 10) .split('') .forEach(v => { var _a; counter[v] = ((_a = counter[v]) !== null && _a !== void 0 ? _a : 0) + 1; }); const more = Object.values(counter); if (!more.some(v => v === 2 || v === 3)) { return { isValid: false, error: new InvalidComponent() }; } return { isValid: true, compact: value, isIndividual: false, isCompany: true, }; }, }; const { name: name$9, localName: localName$9, abbreviation: abbreviation$9, validate: validate$9, format: format$9, compact: compact$9, } = impl$9; const stnr = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$9, localName: localName$9, abbreviation: abbreviation$9, validate: validate$9, format: format$9, compact: compact$9 }); const impl$8 = Object.assign(Object.assign({}, jmbg$4), { name: 'Montenegrin Unique Master Citizen Number', localName: ' Јединствени матични број грађана', abbreviation: 'ЈМБГ' }); const { name: name$8, localName: localName$8, abbreviation: abbreviation$8, validate: validate$8, format: format$8, compact: compact$8, } = impl$8; const jmbg$3 = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$8, localName: localName$8, abbreviation: abbreviation$8, validate: validate$8, format: format$8, compact: compact$8 }); const impl$7 = Object.assign(Object.assign({}, jmbg$4), { name: 'Macedonian Unique Master Citizen Number', localName: 'Единствен матичен број на граѓанинот', abbreviation: 'ЕМБГ' }); const { name: name$7, localName: localName$7, abbreviation: abbreviation$7, validate: validate$7, format: format$7, compact: compact$7, } = impl$7; const jmbg$2 = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$7, localName: localName$7, abbreviation: abbreviation$7, validate: validate$7, format: format$7, compact: compact$7 }); const banksMap = { 2: { tag: 'BANAMEX', name: 'Banco Nacional de México, S.A.' }, 6: { tag: 'BANCOMEXT', name: 'Banco Nacional de Comercio Exterior' }, 9: { tag: 'BANOBRAS', name: 'Banco Nacional de Obras y Servicios Públicos' }, 12: { tag: 'BBVA BANCOMER', name: 'BBVA Bancomer, S.A.' }, 14: { tag: 'SANTANDER', name: 'Banco Santander, S.A.' }, 19: { tag: 'BANJERCITO', name: 'Banco Nacional del Ejército, Fuerza Aérea y Armada', }, 21: { tag: 'HSBC', name: 'HSBC México, S.A.' }, 22: { tag: 'GE MONEY', name: 'GE Money Bank, S.A.' }, 30: { tag: 'BAJÍO', name: 'Banco del Bajío, S.A.' }, 32: { tag: 'IXE', name: 'IXE Banco, S.A.' }, 36: { tag: 'INBURSA', name: 'Banco Inbursa, S.A.' }, 37: { tag: 'INTERACCIONES', name: 'Banco Interacciones, S.A.' }, 42: { tag: 'MIFEL', name: 'Banca Mifel, S.A.' }, 44: { tag: 'SCOTIABANK', name: 'Scotiabank Inverlat, S.A.' }, 58: { tag: 'BANREGIO', name: 'Banco Regional de Monterrey, S.A.' }, 59: { tag: 'INVEX', name: 'Banco Invex, S.A.' }, 60: { tag: 'BANSI', name: 'Bansi, S.A.' }, 62: { tag: 'AFIRME', name: 'Banca Afirme, S.A.' }, 72: { tag: 'BANORTE', name: 'Banco Mercantil del Norte, S.A.' }, 102: { tag: 'ABNAMRO', name: 'ABN AMRO Bank México, S.A.' }, 103: { tag: 'AMERICAN EXPRESS', name: 'American Express Bank (México), S.A.', }, 106: { tag: 'BAMSA', name: 'Bank of America México, S.A.' }, 108: { tag: 'TOKYO', name: 'Bank of Tokyo-Mitsubishi UFJ (México), S.A.' }, 110: { tag: 'JP MORGAN', name: 'Banco J.P. Morgan, S.A.' }, 112: { tag: 'BMONEX', name: 'Banco Monex, S.A.' }, 113: { tag: 'VE POR MAS', name: 'Banco Ve por Mas, S.A.' }, 116: { tag: 'ING', name: 'ING Bank (México), S.A.' }, 124: { tag: 'DEUTSCHE', name: 'Deutsche Bank México, S.A.' }, 126: { tag: 'CREDIT SUISSE', name: 'Banco Credit Suisse (México), S.A.' }, 127: { tag: 'AZTECA', name: 'Banco Azteca, S.A.' }, 128: { tag: 'AUTOFIN', name: 'Banco Autofin México, S.A.' }, 129: { tag: 'BARCLAYS', name: 'Barclays Bank México, S.A.' }, 130: { tag: 'COMPARTAMOS', name: 'Banco Compartamos, S.A.' }, 131: { tag: 'FAMSA', name: 'Banco Ahorro Famsa, S.A.' }, 132: { tag: 'BMULTIVA', name: 'Banco Multiva, S.A.' }, 133: { tag: 'PRUDENTIAL', name: 'Prudencial Bank, S.A.' }, 134: { tag: 'WAL-MART', name: 'Banco Wal Mart de México Adelante, S.A.' }, 135: { tag: 'NAFIN', name: 'Nacional Financiera, S.N.C.' }, 136: { tag: 'REGIONAL', name: 'Banco Regional, S.A.' }, 137: { tag: 'BANCOPPEL', name: 'BanCoppel, S.A.' }, 138: { tag: 'ABC CAPITAL', name: 'ABC Capital, S.A. I.B.M.' }, 139: { tag: 'UBS BANK', name: 'UBS Banco, S.A.' }, 140: { tag: 'FÁCIL', name: 'Banco Fácil, S.A.' }, 141: { tag: 'VOLKSWAGEN', name: 'Volkswagen Bank S.A. Institución de Banca Múltiple', }, 143: { tag: 'CIBANCO', name: 'Consultoría Internacional Banco, S.A.' }, 145: { tag: 'BBASE', name: 'Banco BASE, S.A. de I.B.M.' }, 147: { tag: 'BANKAOOL', name: 'Bankaool, S.A., Institución de Banca Múltiple', }, 148: { tag: 'PAGATODO', name: 'Banco PagaTodo S.A., Institución de Banca Múltiple', }, 150: { tag: 'BIM', name: 'Banco Inmobiliario Mexicano, S.A., Institución de Banca Múltiple', }, 152: { tag: 'BANCREA', name: 'Banco Bancrea, S.A., Institución de Banca Múltiple', }, 156: { tag: 'SABADELL', name: 'Banco Sabadell, S.A. I.B.M.' }, 166: { tag: 'BANSEFI', name: 'Banco del Ahorro Nacional y Servicios Financieros, S.N.C.', }, 168: { tag: 'HIPOTECARIA FEDERAL', name: 'Sociedad Hipotecaria Federal, S.N.C.', }, 600: { tag: 'MONEXCB', name: 'Monex Casa de Bolsa, S.A. de C.V.' }, 601: { tag: 'GBM', name: 'GBM Grupo Bursátil Mexicano, S.A. de C.V.' }, 602: { tag: 'MASARI CC.', name: 'Masari Casa de Cambio, S.A. de C.V.' }, 604: { tag: 'C.B. INBURSA', name: 'Inversora Bursátil, S.A. de C.V.' }, 605: { tag: 'VALUÉ', name: 'Valué, S.A. de C.V., Casa de Bolsa' }, 606: { tag: 'CB BASE', name: 'Base Internacional Casa de Bolsa, S.A. de C.V.', }, 607: { tag: 'TIBER', name: 'Casa de Cambio Tiber, S.A. de C.V.' }, 608: { tag: 'VECTOR', name: 'Vector Casa de Bolsa, S.A. de C.V.' }, 610: { tag: 'B&B', name: 'B y B Casa de Cambio, S.A. de C.V.' }, 611: { tag: 'INTERCAM', name: 'Intercam Casa de Cambio, S.A. de C.V.' }, 613: { tag: 'MULTIVA', name: 'Multivalores Casa de Bolsa, S.A. de C.V. Multiva Gpo. Fin.', }, 614: { tag: 'ACCIVAL', name: 'Acciones y Valores Banamex, S.A. de C.V., Casa de Bolsa', }, 615: { tag: 'MERRILL LYNCH', name: 'Merrill Lynch México, S.A. de C.V., Casa de Bolsa', }, 616: { tag: 'FINAMEX', name: 'Casa de Bolsa Finamex, S.A. de C.V.' }, 617: { tag: 'VALMEX', name: 'Valores Mexicanos Casa de Bolsa, S.A. de C.V.' }, 618: { tag: 'ÚNICA', name: 'Única Casa de Cambio, S.A. de C.V.' }, 619: { tag: 'ASEGURADORA MAPFRE', name: 'MAPFRE Tepeyac S.A.' }, 620: { tag: 'AFORE PROFUTURO', name: 'Profuturo G.N.P., S.A. de C.V.' }, 621: { tag: 'CB ACTINBER', name: 'Actinver Casa de Bolsa, S.A. de C.V.' }, 622: { tag: 'ACTINVE SI', name: 'Actinver S.A. de C.V.' }, 623: { tag: 'SKANDIA', name: 'Skandia Vida S.A. de C.V.' }, 624: { tag: 'CONSULTORÍA', name: 'Consultoría Internacional Casa de Cambio, S.A. de C.V.', }, 626: { tag: 'CBDEUTSCHE', name: 'Deutsche Securities, S.A. de C.V.' }, 627: { tag: 'ZURICH', name: 'Zurich Compañía de Seguros, S.A.' }, 628: { tag: 'ZURICHVI', name: 'Zurich Vida, Compañía de Seguros, S.A.' }, 629: { tag: 'HIPOTECARIA SU CASITA', name: 'Hipotecaria su Casita, S.A. de C.V.', }, 630: { tag: 'C.B. INTERCAM', name: 'Intercam Casa de Bolsa, S.A. de C.V.' }, 631: { tag: 'C.B. VANGUARDIA', name: 'Vanguardia Casa de Bolsa, S.A. de C.V.', }, 632: { tag: 'BULLTICK C.B.', name: 'Bulltick Casa de Bolsa, S.A. de C.V.' }, 633: { tag: 'STERLING', name: 'Sterling Casa de Cambio, S.A. de C.V.' }, 634: { tag: 'FINCOMUN', name: 'Fincomún, Servicios Financieros Comunitarios, S.A. de C.V.', }, 636: { tag: 'HDI SEGUROS', name: 'HDI Seguros, S.A. de C.V.' }, 637: { tag: 'ORDER', name: 'OrderExpress Casa de Cambio , S.A. de C.V. AAC' }, 638: { tag: 'AKALA', name: 'Akala, S.A. de C.V., Sociedad Financiera Popular', }, 640: { tag: 'JP MORGAN C.B.', name: 'J.P. Morgan Casa de Bolsa, S.A. de C.V.', }, 642: { tag: 'REFORMA', name: 'Operadora de Recursos Reforma, S.A. de C.V.' }, 646: { tag: 'STP', name: 'Sistema de Transferencias y Pagos STP, S.A. de C.V., SOFOM E.N.R.', }, 647: { tag: 'TELECOMM', name: 'Telecomunicaciones de México' }, 648: { tag: 'EVERCORE', name: 'Evercore Casa de Bolsa, S.A. de C.V.' }, 649: { tag: 'SKANDIA', name: 'Skandia Operadora S.A. de C.V.' }, 651: { tag: 'SEGMTY', name: 'Seguros Monterrey New York Life, S.A de C.V.' }, 652: { tag: 'ASEA', name: 'Solución Asea, S.A. de C.V., Sociedad Financiera Popular', }, 653: { tag: 'KUSPIT', name: 'Kuspit Casa de Bolsa, S.A. de C.V.' }, 655: { tag: 'SOFIEXPRESS', name: 'J.P. SOFIEXPRESS, S.A. de C.V., S.F.P.' }, 656: { tag: 'UNAGRA', name: 'UNAGRA, S.A. de C.V., S.F.P.' }, 659: { tag: 'OPCIONES EMPRESARIALES DEL NOROESTE', name: 'Opciones Empresariales Del Noreste, S.A. DE C.V.', }, 670: { tag: 'LIBERTAD', name: 'Libertad Servicios Financieros, S.A. De C.V.', }, 846: { tag: 'STP', name: 'Sistema de Transferencias y Pagos STP' }, 901: { tag: 'CLS', name: 'CLS Bank International' }, 902: { tag: 'INDEVAL', name: 'SD. INDEVAL, S.A. de C.V.' }, 999: { tag: 'N/A', name: 'N/A' }, }; const citiesPairs = [ [10, 'Aguascalientes'], [12, 'Calvillo'], [14, 'Jesús María'], [20, 'Mexicali'], [22, 'Ensenada'], [27, 'Tecate'], [27, 'Tijuana'], [28, 'La Mesa'], [28, 'Rosarito'], [28, 'Tijuana [alternate]'], [40, 'La Paz'], [41, 'Cabo San Lucas'], [42, 'Ciudad Constitución'], [43, 'Guerrero Negro'], [45, 'San José del Cabo'], [46, 'Santa Rosalía'], [50, 'Campeche'], [51, 'Calkiní'], [52, 'Ciudad del Carmen'], [53, 'Champotón'], [60, 'Gómez Palacio'], [60, 'Torreón'], [62, 'Ciudad Acuña'], [68, 'Monclova'], [71, 'Nava'], [72, 'Nueva Rosita'], [74, 'Parras de la Fuente'], [75, 'Piedras Negras'], [76, 'Ramos Arizpe'], [77, 'Sabinas'], [78, 'Saltillo'], [80, 'San Pedro de las Colonias'], [90, 'Colima'], [95, 'Manzanillo'], [97, 'Tecomán'], [100, 'Terán'], [100, 'Tuxtla Gutiérrez'], [103, 'Arriaga'], [107, 'Cintalapa'], [109, 'Comitán'], [109, 'Villa Las Rosas'], [111, 'Chiapa de Corso'], [113, 'F. Comalapa'], [114, 'Huixtla'], [123, 'Ocosingo'], [124, 'Ocozocuautla'], [125, 'Palenque'], [126, 'Pichucalco'], [127, 'Pijijiapan'], [128, 'Reforma'], [130, 'San Cristóbal de las Casas'], [131, 'Simojovel'], [133, 'Tapachula'], [135, 'Tonala'], [137, 'Venustiano Carranza'], [138, 'Villa Flores'], [140, 'Yajalón'], [150, 'Chihuahua'], [150, 'Ciudad Delicias'], [152, 'Ciudad Anáhuac'], [155, 'Ciudad Camargo'], [158, 'Ciudad Cuauhtémoc'], [161, 'Ciudad Guerrero'], [162, 'Parral'], [163, 'Ciudad Jiménez'], [164, 'Ciudad Juárez'], [165, 'Ciudad Madera'], [167, 'El Molino de Namiquipa'], [168, 'Nuevo Casas Grandes'], [180, 'Atizapan'], [180, 'Chalco'], [180, 'Ciudad de México'], [180, 'Coacalco'], [180, 'Cuautitlán Izcalli'], [180, 'Cuautitlán'], [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'], [190, 'Durango'], [198, 'N/A'], [201, 'Tepehuanes'], [202, 'Vicente Guerrero'], [210, 'Guanajuato'], [211, 'Abasolo'], [212, 'Acámbaro'], [213, 'Apaseo el Alto'], [214, 'Apaseo el Grande'], [215, 'Celaya'], [216, 'Comonfort'], [217, 'Coroneo'], [218, 'Cortazar'], [219, 'Cuerámaro'], [220, 'Dolores Hidalgo'], [222, 'Irapuato'], [223, 'Jaral del Progreso'], [224, 'Jerécuaro'], [225, 'León'], [226, 'Cd. Manuel Doblado'], [227, 'Moroleón'], [229, 'Pénjamo'], [232, 'Romita'], [233, 'Salamanca'], [234, 'Salvatierra'], [236, 'San Felipe'], [237, 'Purísima de Bustos'], [237, 'San Francisco del Rincoón'], [238, 'San José Iturbide'], [239, 'San Luis de la Paz'], [240, 'San Miguel Allende'], [244, 'Silao'], [247, 'Uriangato'], [248, 'Valle de Santiago'], [249, 'Yuriria'], [260, 'Chilpancingo'], [261, 'Acapulco'], [263, 'Arcelia'], [264, 'Atoyac de Álvarez'], [266, 'Ciudad Altamirano'], [267, 'Coyuca de Benítez'], [270, 'Chilapa'], [271, 'Huitzuco'], [272, 'Iguala'], [272, 'La Sabana'], [274, 'Cuajinicuilapa'], [274, 'Ometepec'], [275, 'San Marcos'], [276, 'Taxco'], [278, 'Teloloapan'], [281, 'Tlapa'], [282, 'Ixtapa Zihuatanejo'], [282, 'Zihuatanejo'], [290, 'Pachuca'], [291, 'Actopan'], [292, 'Apam'], [293, 'Atotonilco el Grande'], [294, 'Ciudad Sahagún'], [294, 'Teocaltiche'], [295, 'Cuautepec'], [296, 'Huejutla'], [297, 'Huichapan'], [298, 'Ixmiquilpan'], [303, 'Progreso de Obregón'], [305, 'Tepeapulco'], [308, 'Tizayuca'], [311, 'Tula de Allende'], [312, 'Tulancingo'], [313, 'Zacualtipán'], [314, 'Zimapán'], [320, 'El Salto'], [320, 'Guadalajara'], [320, 'San Pedro Tlaquepaque'], [320, 'Tlajomulco'], [320, 'Tonala [alternate]'], [320, 'Zapopan'], [326, 'Ameca'], [327, 'Arandas'], [330, 'Atotonilco el Alto'], [331, 'Atequiza'], [333, 'Autlán'], [334, 'Azteca'], [340, 'Casimiro Castillo'], [341, 'Cihuatlán'], [342, 'Ciudad Guzmán'], [346, 'Chapala'], [348, 'El Grullo'], [355, 'Ixtlahuacán del Río'], [356, 'Jalostotitlán'], [357, 'Jamay'], [361, 'La Barca'], [362, 'Lagos de Moreno'], [370, 'Ocotlán'], [373, 'Pihuamo'], [375, 'Las Juntas'], [375, 'Nuevo Vallarta'], [375, 'Pitillal'], [375, 'Puerto Vallarta'], [381, 'San Juan de los Lagos'], [382, 'N/A'], [384, 'San Miguel el Alto'], [385, 'San Patricio Melaque'], [386, 'Sayula'], [387, 'Tala'], [389, 'Tamazula de Gordiano'], [391, 'Tecalitlán'], [396, 'Tepatitlán'], [397, 'Tequila'], [403, 'Tototlán'], [404, 'Túxpam'], [411, 'Villa Hidalgo'], [413, 'Zacoalco de Torres'], [414, 'Zapotiltic'], [416, 'Zapotlanejo'], [420, 'Toluca'], [421, 'Acambay'], [422, 'Almoloya de Juárez'], [424, 'Amecameca'], [425, 'Apaxco'], [426, 'Atlacomulco'], [428, 'Coatepec de Harinas'], [430, 'Chicoloapan'], [431, 'Chiconcuac'], [432, 'El Oro'], [433, 'Ixtapan de la Sal'], [434, 'Ixtlahuaca'], [435, 'Jilotepec'], [438, 'Lerma'], [441, 'Metepec'], [443, 'Otumba'], [445, 'San Mateo Atenco'], [446, 'Tejupilco'], [448, 'Temascaltepec'], [449, 'Temoaya'], [450, 'Tenancingo'], [451, 'Tenago del Valle'], [453, 'Santiago Tiangistenco'], [455, 'Tultepec'], [456, 'Tultitlán'], [457, 'Valle de Bravo'], [460, 'Villa Nicolás Romero'], [463, 'Zumpango'], [470, 'Morelia'], [472, 'Aguililla'], [476, 'Apatzingán'], [480, 'Ciudad Hidalgo'], [483, 'Cotija'], [484, 'Cuitzeo'], [492, 'Huetamo'], [493, 'Jacona'], [494, 'Jiquilpan'], [496, 'La Piedad'], [497, 'Lázaro Cárdenas'], [498, 'Los Reyes'], [499, 'Maravatío'], [501, 'Nueva Italia'], [506, 'Pátzcuaro'], [508, 'Purépero'], [509, 'Puruandiro'], [512, 'Sahuayo'], [515, 'Tacámbaro'], [517, 'Tangancícuaro'], [519, 'Tepalcatepec'], [523, 'Tlazazalca'], [528, 'Uruapan'], [533, 'Yurécuaro'], [534, 'Zacapu'], [535, 'Zamora'], [536, 'Zinapécuaro'], [537, 'Zitácuaro'], [540, 'Cuernavaca'], [542, 'Cuautla'], [542, 'Oaxtepec, Morelos'], [543, 'Jiutepec'], [544, 'Jojutla'], [545, 'Puente de Ixtla'], [546, 'Temixco'], [548, 'Tetecala'], [549, 'Yautepec'], [552, 'Zacatepec'], [560, 'Tepic'], [561, 'Acaponeta'], [562, 'Ahuacatlán'], [564, 'Compostela'], [566, 'Ixtlán del Río'], [571, 'San Blas'], [573, 'Santiago Ixcuintla'], [575, 'Túxpam [alternate]'], [580, 'Apodaca'], [580, 'Cadereyta'], [580, 'Cd. Guadalupe'], [580, 'General Escobedo'], [580, 'Monterrey'], [580, 'San Nicolás de los Garza'], [580, 'San Pedro Garza García'], [580, 'Santa Catarina'], [583, 'Allende'], [592, 'General Zuazua'], [595, 'Linares'], [597, 'Montemorelos'], [599, 'Sabinas Hidalgo'], [600, 'Salinas Victoria'], [601, 'El Cercado'], [601, 'Villa de Santiago'], [610, 'Oaxaca'], [613, 'Tlaxiaco'], [614, 'Huajuapan de León'], [616, 'Ixtepec'], [617, 'Juchitán'], [619, 'Loma Bonita'], [620, 'Matías Romero'], [621, 'Miahuatlán'], [622, 'Ocotlán [alternate]'], [624, 'Puerto Escondido'], [626, 'Salina Cruz'], [627, 'Lagunas'], [628, 'Tuxtepec'], [630, 'Pochutla'], [631, 'San Pedro Tapanatepec'], [632, 'Santa Lucía del Camino'], [634, 'Bahías de Huatulco'], [635, 'Santiago Juxtlahuaca'], [636, 'Pinotepa Nacional'], [637, 'Tehuantepec'], [638, 'Tlacolula'], [640, 'Zimatlán'], [650, 'Cholula'], [650, 'La Resurrección'], [650, 'Puebla'], [650, 'San Baltazar Campeche'], [651, 'N/A'], [652, 'Acatzingo'], [654, 'Atlixco'], [656, 'Cuetzalan'], [659, 'Huauchinango'], [660, 'Huejotzingo'], [662, 'Izúcar de Matamoros'], [667, 'San Martín Texmelucan'], [668, 'San Felipe Hueyotlipan'], [669, 'Tecamachalco'], [670, 'Tehuacán'], [671, 'San Lorenzo'], [672, 'Teziutlán'], [674, 'Xicotepec de Juárez'], [676, 'Zacatlán'], [680, 'Pedro Escobedo'], [680, 'Querétaro'], [680, 'Villa Corregidora'], [681, 'Amealco'], [685, 'San Juan del Río'], [686, 'Tequisquiapan'], [690, 'Chetumal'], [691, 'Cancún'], [691, 'Col. Puerto Juárez'], [692, 'Cozumel'], [693, 'N/A'], [694, 'Playa del Carmen'], [700, 'San Luis Potosí'], [703, 'Cerritos'], [705, 'Ciudad Valles'], [709, 'Matehuala'], [711, 'Río Verde'], [716, 'Tamuín'], [730, 'Culiacán'], [735, 'Concordia'], [736, 'Cosala'], [737, 'Choix'], [738, 'El Fuerte'], [739, 'Escuinapa'], [740, 'Guamúchil'], [741, 'Guasave'], [743, 'Los Mochis'], [743, 'Topolobampo'], [744, 'Mazatlán'], [745, 'Mocorito'], [746, 'Navolato'], [760, 'Hermosillo'], [761, 'Agua Prieta'], [765, 'Caborca'], [766, 'Cananea'], [767, 'Ciudad Obregón'], [767, 'Esperanza'], [769, 'Empalme'], [770, 'Guaymas'], [770, 'San Carlos'], [771, 'Huatabampo'], [773, 'Magdalena'], [776, 'Nacozari de García'], [777, 'Navojoa'], [778, 'Nogales'], [779, 'Puerto Peñasco'], [780, 'San Luis Río Colorado'], [790, 'Tamulte'], [790, 'Villa Hermosa'], [792, 'Cárdenas'], [793, 'Ciudad Pemex'], [794, 'Comalcalco'], [796, 'Emiliano Zapata'], [797, 'Frontera'], [798, 'Huimanguillo'], [800, 'Jalpa de Méndez'], [802, 'Macuspana'], [803, 'Nacajuca'], [804, 'Paraíso'], [805, 'Tacotalpa'], [806, 'Teapa'], [807, 'Tenosique'], [810, 'Ciudad Victoria'], [811, 'Altamira'], [813, 'Ciudad Madero'], [813, 'Tampico'], [814, 'Ciudad Mante'], [818, 'Matamoros'], [821, 'Colombia'], [821, 'Nuevo Laredo'], [822, 'Reynosa'], [823, 'Río Bravo'], [825, 'Soto La Marina'], [826, 'Valle Hermoso'], [830, 'Tlaxcala'], [832, 'Apizaco'], [834, 'Santa Ana Chiautempan'], [840, 'Jalapa'], [841, 'Acayucan'], [843, 'Agua Dulce'], [845, 'Álamo'], [846, 'Altotonga'], [848, 'Banderilla'], [849, 'Boca del Río'], [852, 'Ciudad Mendoza'], [853, 'Coatepec'], [854, 'Coatzacoalcos'], [855, 'Córdoba'], [856, 'Cosamaloapan'], [860, 'Cuitláhuac'], [863, 'Fortín de las Flores'], [864, 'Gutiérrez Zamora'], [865, 'Huatusco'], [867, 'Isla'], [868, 'Ixtaczoquitlán'], [869, 'Jáltipan'], [871, 'Juan Rodríguez Clara'], [872, 'Villa José Cardel'], [873, 'Las Choapas'], [875, 'Naranjos'], [876, 'Martínez de la Torre'], [877, 'Minatitlán'], [878, 'Misantla'], [879, 'Nanchital'], [882, 'Orizaba'], [885, 'Papantla'], [886, 'Perote'], [888, 'Poza Rica'], [889, 'Río Blanco'], [890, 'San Andrés Tuxtla'], [891, 'San Rafael'], [894, 'Platón Sánchez'], [894, 'Tantoyuca'], [895, 'Tempoal'], [898, 'Tierra Blanca'], [901, 'Tlapacoyan'], [903, 'Túxpam de Rodríguez Cano'], [905, 'Cd. Industrial Framboyan'], [905, 'Veracruz'], [910, 'Mérida'], [913, 'Motul'], [914, 'Oxkutzcab'], [915, 'Progreso'], [917, 'Ticul'], [918, 'Tizimín'], [920, 'Valladolid'], [930, 'Zacatecas'], [933, 'Fresnillo'], [934, 'Guadalupe'], [935, 'Jalpa'], [936, 'Jerez de G. Salinas'], [938, 'Juchipila'], [939, 'Loreto'], [946, 'Nochistlán'], [958, 'Valparaíso'], [960, 'Calera de V. Rosales'], ]; const cities = citiesPairs.reduce((acc, [k, v]) => (Object.assign(Object.assign({}, acc), { [k]: v })), {}); function clean$2(input) { return cleanUnicode(input, ' '); } const nameBlacklist = new Set([ 'BACA', 'BAKA', 'BUEI', 'BUEY', 'CACA', 'CACO', 'CAGA', 'CAGO', 'CAKA', 'CAKO', 'COGE', 'COGI', 'COJA', 'COJE', 'COJI', 'COJO', 'COLA', 'CULO', 'FALO', 'FETO', 'GETA', 'GUEI', 'GUEY', 'JETA', 'JOTO', 'KACA', 'KACO', 'KAGA', 'KAGO', 'KAKA', 'KAKO', 'KOGE', 'KOGI', 'KOJA', 'KOJE', 'KOJI', 'KOJO', 'KOLA', 'KULO', 'LILO', 'LOCA', 'LOCO', 'LOKA', 'LOKO', 'MAME', 'MAMO', 'MEAR', 'MEAS', 'MEON', 'MIAR', 'MION', 'MOCO', 'MOKO', 'MULA', 'MULO', 'NACA', 'NACO', 'PEDA', 'PEDO', 'PENE', 'PIPI', 'PITO', 'POPO', 'PUTA', 'PUTO', 'QULO', 'RATA', 'ROBA', 'ROBE', 'ROBO', 'RUIN', 'SENO', 'TETA', 'VACA', 'VAGA', 'VAGO', 'VAKA', 'VUEI', 'VUEY', 'WUEI', 'WUEY', ]); const validStates = new Set([ 'AS', 'BC', 'BS', 'CC', 'CH', 'CL', 'CM', 'CS', 'DF', 'DG', 'GR', 'GT', 'HG', 'JC', 'MC', 'MN', 'MS', 'NE', 'NL', 'NT', 'OC', 'PL', 'QR', 'QT', 'SL', 'SP', 'SR', 'TC', 'TL', 'TS', 'VZ', 'YN', 'ZS', ]); const checkAlphabet = '0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ'; const checkAlphabetDict = checkAlphabet .split('') .reduce((acc, c, idx) => (Object.assign(Object.assign({}, acc), { [c]: idx })), {}); const impl$6 = { name: 'Mexican Personal Identification', localName: 'Clave Única de Registro de Población', abbreviation: 'CURP', compact(input) { const [value, err] = clean$2(input); if (err) { throw err; } return value.toLocaleUpperCase(); }, format(input) { const [value] = clean$2(input); return value; }, validate(input) { const [value, error] = clean$2(input); if (error) { return { isValid: false, error }; } if (value.length !== 18) { return { isValid: false, error: new InvalidLength() }; } if (!/^[A-Z]{4}[0-9]{6}[A-Z]{6}[0-9A-Z][0-9]$/.test(value)) { return { isValid: false, error: new InvalidFormat() }; } if (!isValidDateCompactYYMMDD(value.substr(4, 6))) { return { isValid: false, error: new InvalidComponent() }; } if (nameBlacklist.has(value.substr(0, 4))) { return { isValid: false, error: new InvalidComponent() }; } if (!['H', 'M'].includes(value[10])) { return { isValid: false, error: new InvalidComponent() }; } if (!validStates.has(value.substr(11, 2))) { return { isValid: false, error: new InvalidComponent() }; } const check = value .substr(0, 17) .split('') .reduce((acc, c, idx) => { var _a; return acc + ((_a = checkAlphabetDict[c]) !== null && _a !== void 0 ? _a : 0) * (18 - idx); }, 0); const checkStr = String((10 - (check % 10)) % 10); if (checkStr !== value.substr(17, 1)) { return { isValid: false, error: new InvalidChecksum() }; } return { isValid: true, compact: value, isIndividual: true, isCompany: false, }; }, }; function getBirthDateImpl(value) { const parts = splitAt(value, 4, 6, 8); const yyN = parseInt(parts[1], 10); const mmN = parseInt(parts[2], 10) - 1; const ddN = parseInt(parts[3], 10); if (!Number.isNaN(parseInt(value[16], 10))) { return new Date(yyN + 1900, mmN, ddN); } return new Date(yyN + 2000, mmN, ddN); } function getGender(input) { const value = impl$6.compact(input); return value[10] === 'H' ? 'M' : 'F'; } function getBirthDate(input) { const value = impl$6.compact(input); return getBirthDateImpl(value); } const { name: name$6, localName: localName$6, abbreviation: abbreviation$6, validate: validate$6, format: format$6, compact: compact$6, } = impl$6; const curp = /*#__PURE__*/Object.freeze({ __proto__: null, getGender: getGender, getBirthDate: getBirthDate, name: name$6, localName: localName$6, abbreviation: abbreviation$6, validate: validate$6, format: format$6, compact: compact$6 }); function clean$1(input) { return cleanUnicode(input, ' -.', 'PT'); } const impl$5 = { name: 'Portuguese Tax Identification Number', localName: 'Número de Identificação Fiscal', abbreviation: 'NIF', compact(input) { const [value, err] = clean$1(input); if (err) { throw err; } return value; }, format(input) { const [value] = clean$1(input); return splitAt(value, 3, 6).join(' '); }, validate(input) { const [value, error] = clean$1(input); if (error) { return { isValid: false, error }; } if (value.length !== 9) { return { isValid: false, error: new InvalidLength() }; } if (!isdigits(value) || value[0] === '0') { return { isValid: false, error: new InvalidFormat() }; } const [front, check] = splitAt(value, -1); const sum = weightedSum(front, { weights: [9, 8, 7, 6, 5, 4, 3, 2, 1], modulus: 11, }); if (String((11 - sum) % 10) !== check) { return { isValid: false, error: new InvalidChecksum() }; } return { isValid: true, compact: value, isIndividual: '1234'.includes(value[0]), isCompany: !'1234'.includes(value[0]), }; }, }; const { name: name$5, localName: localName$5, abbreviation: abbreviation$5, validate: validate$5, format: format$5, compact: compact$5, } = impl$5; const nif = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$5, localName: localName$5, abbreviation: abbreviation$5, validate: validate$5, format: format$5, compact: compact$5 }); const impl$4 = Object.assign(Object.assign({}, nif), { name: 'Portuguese Legal Person Identification Number', localName: 'Número de Identificação de Pessoa Colectiva', abbreviation: 'NIPC' }); const { name: name$4, localName: localName$4, abbreviation: abbreviation$4, validate: validate$4, format: format$4, compact: compact$4, } = impl$4; const nipc = /*#__PURE__*/Object.freeze({ __proto__: null, name: name$4, localName: localName$4, abbreviation: