一、手機號碼的結構
手機號碼通常由11位數字組成,其中前三位表示運營商,目前中國三大運營商分別是中國移動、中國聯通和中國電信。前三位的編號如下:
中國移動:134、135、136、137、138、139、150、151、152、157、158、159、182、183、184、187、188、147、178
中國聯通:130、131、132、155、156、185、186、145、176
中國電信:133、153、180、181、189、177、173、149
手機號碼的第4-7位是為地區編碼,表示該手機號屬於哪個省份或直轄市。第8-11位是用戶號碼,全國每個號碼段的數量都有限制,總共不超過1億。
二、合法性驗證
在進行數據處理之前,需要對這1000個隨機手機號碼進行合法性驗證,主要包括以下幾個方面:
1、是否為11位數字
function isPhoneNumber(phoneNumber) { if (phoneNumber && /^[0-9]{11}$/.test(phoneNumber)) { return true; } return false; }
2、是否符合手機號碼的規則
function isMobilePhoneNumber(phoneNumber) { if (phoneNumber && /^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\d{8}$/.test(phoneNumber)) { return true; } return false; }
3、是否屬於三大運營商
function getMobileServiceProvider(phoneNumber) { if (!isMobilePhoneNumber(phoneNumber)) { return ''; } var serviceProvider = ''; var mobileNumber = phoneNumber.substr(0, 7); if (/^(134|135|136|137|138|139|150|151|152|157|158|159|182|183|184|187|188|147|178)/.test(mobileNumber)) { serviceProvider = '中國移動'; } else if (/^(130|131|132|155|156|185|186|145|176)/.test(mobileNumber)) { serviceProvider = '中國聯通'; } else if (/^(133|153|180|181|189|177|173|149)/.test(mobileNumber)) { serviceProvider = '中國電信'; } return serviceProvider; }
三、地區分布
根據手機號碼第4-7位的地區編碼,可以統計出這1000個隨機手機號碼的地區分布情況:
var provinces = { '11': '北京', '12': '天津', '13': '河北', '14': '山西', '15': '內蒙古', '21': '遼寧', '22': '吉林', '23': '黑龍江', '31': '上海', '32': '江蘇', '33': '浙江', '34': '安徽', '35': '福建', '36': '江西', '37': '山東', '41': '河南', '42': '湖北', '43': '湖南', '44': '廣東', '45': '廣西', '46': '海南', '50': '重慶', '51': '四川', '52': '貴州', '53': '雲南', '54': '西藏', '61': '陝西', '62': '甘肅', '63': '青海', '64': '寧夏', '65': '新疆', '71': '台灣', '81': '香港', '82': '澳門', '91': '海外' }; function getPhoneNumberProvince(phoneNumber) { var provinceCode = phoneNumber.substr(3, 2); return provinces[provinceCode] ? provinces[provinceCode] : '未知地區'; } var provinceCounts = { '北京': 0, '天津': 0, '河北': 0, '山西': 0, '內蒙古': 0, '遼寧': 0, '吉林': 0, '黑龍江': 0, '上海': 0, '江蘇': 0, '浙江': 0, '安徽': 0, '福建': 0, '江西': 0, '山東': 0, '河南': 0, '湖北': 0, '湖南': 0, '廣東': 0, '廣西': 0, '海南': 0, '重慶': 0, '四川': 0, '貴州': 0, '雲南': 0, '西藏': 0, '陝西': 0, '甘肅': 0, '青海': 0, '寧夏': 0, '新疆': 0, '台灣': 0, '香港': 0, '澳門': 0, '海外': 0 }; for (var i = 0; i < 1000; i++) { var province = getPhoneNumberProvince(phoneNumbers[i]); provinceCounts[province]++; }
四、重複號碼
這1000個隨機手機號碼中是否存在重複號碼,可以通過hash表實現:
function hasDuplicatePhoneNumber(phoneNumbers) { var hashTable = {}; for (var i = 0; i < phoneNumbers.length; i++) { if (hashTable[phoneNumbers[i]]) { return true; } else { hashTable[phoneNumbers[i]] = true; } } return false; }
如果hasDuplicatePhoneNumber返回true,則說明存在重複號碼。
五、手機號碼生成
如果需要生成指定數量的隨機手機號碼,可以採用以下方法:
1、保證前兩位為11
function generateMobilePhoneNumber() { var phoneNumber = '11'; for (var i = 0; i < 9; i++) { phoneNumber += Math.floor(Math.random() * 10); } return phoneNumber; }
2、保證前三位為運營商
var mobileServiceProviderNumberMap = { '中國移動': /^(134|135|136|137|138|139|150|151|152|157|158|159|182|183|184|187|188|147|178)/, '中國聯通': /^(130|131|132|155|156|185|186|145|176)/, '中國電信': /^(133|153|180|181|189|177|173|149)/ }; function generateMobilePhoneNumber(serviceProvider) { if (!mobileServiceProviderNumberMap[serviceProvider]) { return ''; } var phoneNumber = mobileServiceProviderNumberMap[serviceProvider].toString().substr(1); for (var i = 0; i < 8; i++) { phoneNumber += Math.floor(Math.random() * 10); } return phoneNumber; }
3、可以指定手機號的前7位
function generateMobilePhoneNumber(prefix) { if (!/^[0-9]{7}$/.test(prefix)) { return ''; } var phoneNumber = prefix; for (var i = 0; i < 4; i++) { phoneNumber += Math.floor(Math.random() * 10); } return phoneNumber; }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257086.html