一、手机号码的结构
手机号码通常由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/n/257086.html