對1000個隨機手機號碼進行分析

一、手機號碼的結構

手機號碼通常由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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:43
下一篇 2024-12-15 12:43

相關推薦

發表回復

登錄後才能評論