Skip to content

Instantly share code, notes, and snippets.

@fdc263
Created February 13, 2015 23:49
Show Gist options
  • Save fdc263/7e7789e49ce26b0b249c to your computer and use it in GitHub Desktop.
Save fdc263/7e7789e49ce26b0b249c to your computer and use it in GitHub Desktop.
Objeto Javascript para validação de números de telefone celulares brasileiros, de acordo com as regras da ANATEL.
/*
Usage:
To validate area code and number:
br_mobile.validate('11', '912345436')
br_mobile.validate('54', '12345436')
return true or false
To check if area code require 9 digits
br_mobile.require_ninth_digit('11')
return true, false or undefined (if area code is invalid)
To get the required length of phone number (without area code)
br_mobile.phone_digits('11')
return true, false or undefined (if area code is invalid)
*/
br_mobile = {
areas: {
'11': {'ninth_digit': true, 'state': 'SP'},
'12': {'ninth_digit': true, 'state': 'SP'},
'13': {'ninth_digit': true, 'state': 'SP'},
'14': {'ninth_digit': true, 'state': 'SP'},
'15': {'ninth_digit': true, 'state': 'SP'},
'16': {'ninth_digit': true, 'state': 'SP'},
'17': {'ninth_digit': true, 'state': 'SP'},
'18': {'ninth_digit': true, 'state': 'SP'},
'19': {'ninth_digit': true, 'state': 'SP'},
'21': {'ninth_digit': true, 'state': 'RJ'},
'22': {'ninth_digit': true, 'state': 'RJ'},
'24': {'ninth_digit': true, 'state': 'RJ'},
'27': {'ninth_digit': true, 'state': 'ES'},
'28': {'ninth_digit': true, 'state': 'ES'},
'31': {'ninth_digit': false, 'state': 'MG'},
'32': {'ninth_digit': false, 'state': 'MG'},
'33': {'ninth_digit': false, 'state': 'MG'},
'34': {'ninth_digit': false, 'state': 'MG'},
'35': {'ninth_digit': false, 'state': 'MG'},
'37': {'ninth_digit': false, 'state': 'MG'},
'38': {'ninth_digit': false, 'state': 'MG'},
'41': {'ninth_digit': false, 'state': 'PR'},
'42': {'ninth_digit': false, 'state': 'PR'},
'43': {'ninth_digit': false, 'state': 'PR'},
'44': {'ninth_digit': false, 'state': 'PR'},
'45': {'ninth_digit': false, 'state': 'PR'},
'46': {'ninth_digit': false, 'state': 'PR'},
'47': {'ninth_digit': false, 'state': 'SC'},
'48': {'ninth_digit': false, 'state': 'SC'},
'49': {'ninth_digit': false, 'state': 'SC'},
'51': {'ninth_digit': false, 'state': 'RS'},
'53': {'ninth_digit': false, 'state': 'RS'},
'54': {'ninth_digit': false, 'state': 'RS'},
'55': {'ninth_digit': false, 'state': 'RS'},
'61': {'ninth_digit': false, 'state': 'DF'},
'62': {'ninth_digit': false, 'state': 'GO'},
'63': {'ninth_digit': false, 'state': 'TO'},
'64': {'ninth_digit': false, 'state': 'GO'},
'65': {'ninth_digit': false, 'state': 'MT'},
'66': {'ninth_digit': false, 'state': 'MT'},
'67': {'ninth_digit': false, 'state': 'MS'},
'68': {'ninth_digit': false, 'state': 'AC'},
'69': {'ninth_digit': false, 'state': 'RO'},
'71': {'ninth_digit': false, 'state': 'BA'},
'73': {'ninth_digit': false, 'state': 'BA'},
'74': {'ninth_digit': false, 'state': 'BA'},
'75': {'ninth_digit': false, 'state': 'BA'},
'77': {'ninth_digit': false, 'state': 'BA'},
'79': {'ninth_digit': false, 'state': 'SE'},
'81': {'ninth_digit': false, 'state': 'PE'},
'82': {'ninth_digit': false, 'state': 'AL'},
'83': {'ninth_digit': false, 'state': 'PB'},
'84': {'ninth_digit': false, 'state': 'RN'},
'85': {'ninth_digit': false, 'state': 'CE'},
'86': {'ninth_digit': false, 'state': 'PI'},
'87': {'ninth_digit': false, 'state': 'PE'},
'88': {'ninth_digit': false, 'state': 'CE'},
'89': {'ninth_digit': false, 'state': 'PI'},
'91': {'ninth_digit': false, 'state': 'PA'},
'92': {'ninth_digit': false, 'state': 'AM'},
'93': {'ninth_digit': false, 'state': 'PA'},
'94': {'ninth_digit': false, 'state': 'PA'},
'95': {'ninth_digit': false, 'state': 'RR'},
'96': {'ninth_digit': false, 'state': 'AP'},
'97': {'ninth_digit': false, 'state': 'AM'},
'98': {'ninth_digit': false, 'state': 'MA'},
'99': {'ninth_digit': false, 'state': 'MA'}
},
mobile_bands: {
'SP': [81,82,83,84,85,86,87,88,89,91,92,93,94,96,97,98,99],
'RJ': [80,81,82,83,87,88,91,92,93,94,96,97,98,99],
'ES': [80,81,82,83,87,88,91,92,93,94,96,97,98,99],
'MG': [81,82,83,84,87,88,91,92,93,94,96,97,98,99],
'PR': [84,85,87,88,91,92,93,94,96,97,98,99],
'SC': [84,85,87,88,91,92,93,94,96,97,98,99],
'RS': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'DF': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'GO': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'TO': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'MT': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'MS': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'AC': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'RO': [81,82,83,84,85,91,92,93,94,96,97,98,99],
'BA': [81,82,83,87,88,91,92,93,94,96,97,98,99],
'SE': [81,82,83,87,88,91,92,93,94,96,97,98,99],
'PE': [80,81,82,83,84,85,86,87,88,89,91,92,93,94,96,97,98,99],
'AL': [80,81,82,83,84,85,86,87,88,89,91,92,93,94,96,97,98,99],
'PB': [80,81,82,83,84,85,86,87,88,89,91,92,93,94,96,97,98,99],
'RN': [80,81,82,83,84,85,86,87,88,89,91,92,93,94,96,97,98,99],
'CE': [80,81,82,83,84,85,86,87,88,89,91,92,93,94,96,97,98,99],
'PI': [80,81,82,83,84,85,86,87,88,89,91,92,93,94,96,97,98,99],
'PA': [80,81,82,83,87,88,91,92,93,94,96,97,98,99],
'AM': [80,81,82,83,87,88,91,92,93,94,96,97,98,99],
'RR': [80,81,82,83,87,88,91,92,93,94,96,97,98,99],
'AP': [80,81,82,83,87,88,91,92,93,94,96,97,98,99],
'MA': [80,81,82,83,87,88,91,92,93,94,96,97,98,99]
},
mobile_special_cases_first_2_digits: {
'SP': [76, 89, 91, 92, 93, 94, 71, 72, 73, 74, 75, 95, 65, 68, 80, 99],
'RJ': [74, 75, 76, 71, 72, 95, 84, 85, 86, 89],
'ES': [],
'MG': [85, 86, 89, 96],
'PR': [81],
'SC': [],
'RS': [95],
'DF': [86, 99],
'GO': [86, 99],
'TO': [86, 99],
'MT': [86, 99],
'MS': [86, 99],
'AC': [86, 99],
'RO': [86, 99],
'BA': [86],
'SE': [86],
'PE': [88, 84, 85, 86],
'AL': [88, 84, 85, 86],
'PB': [88, 84, 85, 86],
'RN': [88, 84, 85, 86],
'CE': [88, 84, 85, 86],
'PI': [88, 84, 85, 86],
'PA': [84],
'AM': [84],
'RR': [84],
'AP': [84],
'MA': [84]
},
mobile_special_cases_first_4_digits: {
'SP': [6999,6299,7099,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,7052,7053,7054,7055,7056,7057,7058,7059,7060,7061,7062,8800,8801,8802,8803,8804,8805,8806,8807,8808,8809,8810,8811,8812,8813,8814,8815,8816,8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850,8851,8852,8853,8854,8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870,8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,8885,8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,6057,6058,6059,6060,6193,6194,6195,6196,6197,6198,6199,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411,6412,6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6651,6652,6653,6654,6655,6656,6657,6658,6659,6660,6661,6662,6663,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761,6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794,6795,6796,6797,6798,6799,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712,5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728,5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5472,5473,5474,5769,5770,5771,5772,5773,5774,5775,5776,5777,5778,5779,5780,5781,5782,5783,5784,5785,5786],
'RJ': [],
'ES': [],
'MG': [9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9991,9992,9993,9994,9995,9996,9997,9998,9999],
'PR': [9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955,9956,9957,9958,9959,9960,9961,9962,9963,9964,9965,9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998],
'SC': [],
'RS': [9911,9912,9913,9914,9915,9916,9917,9918,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939],
'DF': [9551,9552,9553,9554,9555,9556,9557,9558,9559,9981,9982,9983,9984,9985,9986,9987,9988,9989],
'GO': [9551,9552,9553,9554,9555,9556,9557,9558,9559,9981,9982,9983,9984,9985,9986,9987,9988,9989],
'TO': [9551,9552,9553,9554,9555,9556,9557,9558,9559,9981,9982,9983,9984,9985,9986,9987,9988,9989],
'MT': [9551,9552,9553,9554,9555,9556,9557,9558,9559,9981,9982,9983,9984,9985,9986,9987,9988,9989],
'MS': [9551,9552,9553,9554,9555,9556,9557,9558,9559,9981,9982,9983,9984,9985,9986,9987,9988,9989],
'AC': [9551,9552,9553,9554,9555,9556,9557,9558,9559,9981,9982,9983,9984,9985,9986,9987,9988,9989],
'RO': [9551,9552,9553,9554,9555,9556,9557,9558,9559,9981,9982,9983,9984,9985,9986,9987,9988,9989],
'BA': [],
'SE': [],
'PE': [8719,8720,8721,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200],
'AL': [8719,8720,8721,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200],
'PB': [8719,8720,8721,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200],
'RN': [8719,8720,8721,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200],
'CE': [8719,8720,8721,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200],
'PI': [8719,8720,8721,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200],
'PA': [],
'AM': [],
'RR': [],
'AP': [],
'MA': []
},
mobile_sme_first_2_digits: {
'SP': [],
'RJ': [70, 77, 78],
'ES': [70, 77, 78],
'MG': [],
'PR': [],
'SC': [],
'RS': [],
'DF': [],
'GO': [],
'TO': [],
'MT': [],
'MS': [],
'AC': [],
'RO': [],
'BA': [],
'SE': [],
'PE': [],
'AL': [],
'PB': [],
'RN': [],
'CE': [],
'PI': [],
'PA': [],
'AM': [],
'RR': [],
'AP': [],
'MA': []
},
phone_digits: function(area){
var area = this.areas[area];
if (area) {
if (area.ninth_digit == true) return 9;
else if (area.ninth_digit == false) return 8;
} else {
return undefined;
}
},
require_ninth_digit: function(area){
var area = this.areas[area];
if (area) {
return area.ninth_digit;
} else {
return undefined;
}
},
check: function(area_code, number){
var area = this.areas[area_code];
if (area) {
var state = area.state;
var first = parseInt(number.slice(0,1));
var two_first = parseInt(number.slice(0,2));
var four_first = parseInt(number.slice(0,4));
if ((area.ninth_digit && number.length != 9) || (!area.ninth_digit && number.length != 8)) {
return 'invalid';
}
if (this.mobile_sme_first_2_digits[state].indexOf(two_first) >= 0)
return 'mobile sme';
else if (this.mobile_special_cases_first_4_digits[state].indexOf(four_first) >= 0)
return 'mobile';
else if (this.mobile_special_cases_first_2_digits[state].indexOf(two_first) >= 0)
return 'mobile';
else if (two_first == 57)
return 'rural landline';
else if (first >= 2 && first <= 5)
return 'landline';
else if (this.mobile_bands[state].indexOf(two_first) >= 0)
return 'mobile';
else
return 'invalid';
} else {
return 'invalid';
}
},
validate: function(area_code, number){
return this.check(area_code, number) != 'invalid'
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment