一、手機號碼的結構
手機號碼通常由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-hk/n/257086.html
微信掃一掃
支付寶掃一掃