export const PLACAS_RANGE = [ ['AAA0001', 'BEZ9999', 'PR', '02/1990'], ['BFA0001', 'GKI9999', 'SP', '10/1991'], ['GKJ0001', 'HOK9999', 'MG', '09/1991'], ['HOL0001', 'HQE9999', 'MA', '01/1992'], ['HQF0001', 'HTW9999', 'MS', '03/1992'], ['HTX0001', 'HZA9999', 'CE', '10/1992'], ['HZB0001', 'IAP9999', 'SE', '09/1993'], ['IAQ0001', 'JDO9999', 'RS', '03/1992'], ['JDP0001', 'JKR9999', 'DF', '04/1994'], ['JKS0001', 'JSZ9999', 'BA', '08/1993'], ['JTA0001', 'JWE9999', 'PA', '07/1993'], ['JWF0001', 'JXY9999', 'AM', '09/1993'], ['JXZ0001', 'KAU9999', 'MT', '09/1993'], ['KAV0001', 'KFC9999', 'GO', '05/1994'], ['KFD0001', 'KME9999', 'PE', '08/1994'], ['KMF0001', 'LVE9999', 'RJ', '05/1994'], ['LVF0001', 'LWQ9999', 'PI', '04/1996'], ['LWR0001', 'MMM9999', 'SC', '06/1996'], ['MMN0001', 'MOW9999', 'PB', '07/1996'], ['MOX0001', 'MTZ9999', 'ES', '12/1995'], ['MUA0001', 'MVK9999', 'AL', '08/1996'], ['MVL0001', 'MXG9999', 'TO', '11/1996'], ['MXH0001', 'MZM9999', 'RN', '06/1998'], ['MZN0001', 'NAG9999', 'AC', '06/1998'], ['NAH0001', 'NBA9999', 'RR', '07/1998'], ['NBB0001', 'NEH9999', 'RO', '07/1998'], ['NEI0001', 'NFB9999', 'AP', '09/1998'], ['NFC0001', 'NGZ9999', 'GO', '08/2003'], ['NHA0001', 'NHT9999', 'MA', '12/2006'], ['NHU0001', 'NIX9999', 'PI', '05/2007'], ['NIY0001', 'NJW9999', 'MT', '10/2007'], ['NJX0001', 'NLU9999', 'GO', '11/2007'], ['NLV0001', 'NMO9999', 'AL', '01/2008'], ['NMP0001', 'NNI9999', 'MA', '05/2008'], ['NNJ0001', 'NOH9999', 'RN', '07/2008'], ['NOI0001', 'NPB9999', 'AM', '07/2008'], ['NPC0001', 'NPQ9999', 'MT', '09/2008'], ['NPR0001', 'NQK9999', 'PB', '11/2008'], ['NQL0001', 'NRE9999', 'CE', '12/2008'], ['NRF0001', 'NSD9999', 'MS', '11/2009'], ['NSE0001', 'NTC9999', 'PA', '11/2009'], ['NTD0001', 'NTW9999', 'BA', '02/2010'], ['NTX0001', 'NUG9999', 'MT', '03/2010'], ['NUH0001', 'NUL9999', 'RR', '06/2010'], ['NUM0001', 'NVF9999', 'CE', '06/2010'], ['NVG0001', 'NVN9999', 'SE', '03/2010'], ['NVO0001', 'NWR9999', 'GO', '03/2010'], ['NWS0001', 'NXQ9999', 'MA', '07/2010'], ['NXR0001', 'NXT9999', 'AC', '05/2011'], ['NXU0001', 'NXW9999', 'PE', '07/2010'], ['NXX0001', 'NYG9999', 'MG', '10/2011'], ['NYH0001', 'NZZ9999', 'BA', '10/2010'], ['OAA0001', 'OAO9999', 'AM', '12/2010'], ['OAP0001', 'OBS9999', 'MT', '05/2011'], ['OBT0001', 'OCA9999', 'PA', '07/2011'], ['OCB0001', 'OCU9999', 'CE', '02/2011'], ['OCV0001', 'ODT9999', 'ES', '05/2011'], ['ODU0001', 'OEI9999', 'PI', '09/2011'], ['OEJ0001', 'OES9999', 'SE', '08/2011'], ['OET0001', 'OFH9999', 'PB', '04/2011'], ['OFI0001', 'OFW9999', 'PA', '03/2011'], ['OFX0001', 'OGG9999', 'PB', '06/2011'], ['OGH0001', 'OHA9999', 'GO', '04/2011'], ['OHB0001', 'OHK9999', 'AL', '09/2011'], ['OHL0001', 'OHW9999', 'RO', '11/2011'], ['OHX0001', 'OIQ9999', 'CE', '12/2011'], ['OIR0001', 'OJQ9999', 'MA', '01/2012'], ['OJR0001', 'OKC9999', 'RN', '04/2012'], ['OKD0001', 'OKH9999', 'SC', '02/2014'], ['OKI0001', 'OLG9999', 'BA', '10/2011'], ['OLH0001', 'OLN9999', 'TO', '02/2012'], ['OLO0001', 'OMH9999', 'MG', '03/2012'], ['OMI0001', 'OOF9999', 'GO', '04/2012'], ['OOG0001', 'OOU9999', 'MS', '02/2012'], ['OOV0001', 'ORC9999', 'MG', '06/2012'], ['ORD0001', 'ORM9999', 'AL', '01/2012'], ['ORN0001', 'OSV9999', 'CE', '07/2012'], ['OSW0001', 'OTZ9999', 'PA', '08/2012'], ['OUA0001', 'OUE9999', 'PI', '11/2012'], ['OUF0001', 'OVD9999', 'BA', '12/2012'], ['OVE0001', 'OVF9999', 'ES', '12/2012'], ['OVG0001', 'OVG9999', 'AC', '05/2013'], ['OVH0001', 'OVL9999', 'ES', '07/2013'], ['OVM0001', 'OVV9999', 'DF', '11/2013'], ['OVW0001', 'OVY9999', 'PI', '10/2013'], ['OVZ0001', 'OWG9999', 'RN', '06/2013'], ['OWH0001', 'OXK9999', 'MG', '10/2013'], ['OXL0001', 'OXL9999', 'RO', '11/2013'], ['OXM0001', 'OXM9999', 'AM', '11/2013'], ['OXN0001', 'OXN9999', 'AL', '11/2013'], ['OXO0001', 'OXO9999', 'PB', '11/2013'], ['OXP0001', 'OXP9999', 'AC', '12/2013'], ['OXQ0001', 'OXZ9999', 'MA', '04/2014'], ['OYA0001', 'OYC9999', 'TO', '11/2013'], ['OYD0001', 'OYK9999', 'ES', '12/2013'], ['OYL0001', 'OYZ9999', 'PE', '02/2014'], ['OZA0001', 'OZA9999', 'CE', '01/2014'], ['OZB0001', 'OZB9999', 'SE', '01/2014'], ['OZC0001', 'OZV9999', 'BA', '03/2014'], ['OZW0001', 'PBZ9999', 'DF', '05/2014'], ['PCA0001', 'PED9999', 'PE', '12/2014'], ['PEE0001', 'PFQ9999', 'PE', '09/2010'], ['PFR0001', 'PGK9999', 'PE', '07/2012'], ['PGL0001', 'PGU9999', 'PE', '10/2013'], ['PGV0001', 'PGZ9999', 'PE', '12/2014'], ['PHA0001', 'PHZ9999', 'AM', '06/2014'], ['PIA0001', 'PIZ9999', 'PI', '06/2014'], ['PJA0001', 'PLZ9999', 'BA', '10/2014'], ['PMA0001', 'POZ9999', 'CE', '06/2014'], ['PPA0001', 'PPZ9999', 'ES', '08/2014'], ['PQA0001', 'PRZ9999', 'GO', '03/2015'], ['PSA0001', 'PTZ9999', 'MA', '12/2014'], ['PUA0001', 'PZZ9999', 'MG', '05/2014'], ['QAA0001', 'QAZ9999', 'MS', '12/2014'], ['QBA0001', 'QCZ9999', 'MT', '05/2014'], ['QDA0001', 'QEZ9999', 'PA', '10/2014'], ['QFA0001', 'QFZ9999', 'PB', '05/2014'], ['QGA0001', 'QGZ9999', 'RN', '09/2014'], ['QHA0001', 'QJZ9999', 'SC', '05/2014'], ['QKA0001', 'QKM9999', 'TO', '11/2014'], ['QKN0001', 'QKZ9999', 'SE', '06/2014'], ['QLA0001', 'QLM9999', 'AL', '09/2015'], ['QLN0001', 'QLT9999', 'AP', '01/2015'], ['QLU0001', 'QLZ9999', 'AC', '08/2014'], ['QMA0001', 'QMP9999', 'SE', '03/2017'], ['QMQ0001', 'QQZ9999', 'MG', '07/2017'], ['QRA0001', 'QRA9999', 'RO', '11/2017'], ['QRB0001', 'QRZ9999', 'ES', '05/2018'], ['QSA0001', 'QSZ9999', 'PB', '04/2018'], ['QTA0001', 'QTB9999', 'RO', '08/2018'], ['QTC0001', 'RIN9999', 'BR', '00/0000'], ['RIO0001', 'RIO9999', 'RJ', '09/2018'], ['RLA0001', 'SAU9999', 'BR', '00/0000'], ['SAV0001', 'SAV9999', 'SP', '09/2009'], ]; export const PLACAS_INVALID = { start: 'SAW0001', end: 'ZZZ9999' } // || Sequências ainda não definidas export function validate_placa(placa: string | number, incluiMercosul?: boolean) { const placaClean = placa.toString() .replace(/-/g, '') .replace(/ /g, '') .toUpperCase(); const regex = { legadoBR: /^[A-Z]{3}[0-9]{4}$/, mercosulBR: /^[A-Z]{3}[0-9]{1}[A-Z]{1}[0-9]{2}$/, mercosulAR: /^[A-Z]{2}[0-9]{3}[A-Z]{2}$|^[A-Z]{1}[0-9]{3}[A-Z]{3}$/, mercosulBO: /^[A-Z]{2}[0-9]{5}$/, mercosulPY: /^[A-Z]{4}[0-9]{3}$|^[0-9]{3}[A-Z]{4}$/, mercosulUY: /^[A-Z]{3}[0-9]{4}$/, } const isLegadoBRInvalid = placaClean >= PLACAS_INVALID.start && placaClean <= PLACAS_INVALID.end; if ((regex.legadoBR.test(placaClean) && !isLegadoBRInvalid) || (regex.mercosulBR.test(placaClean)) || (incluiMercosul && ( (regex.mercosulAR.test(placaClean)) || (regex.mercosulBO.test(placaClean)) || (regex.mercosulPY.test(placaClean)) || (regex.mercosulUY.test(placaClean)) ))) { return true; } return false; }