对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/n/257086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-15 12:43
下一篇 2024-12-15 12:43

相关推荐

  • 手机号码生成的全面介绍

    作为现代社会不可或缺的通讯方式,手机已经成为人们日常生活中必不可少的部分。在许多场景下需要使用到手机号码,比如注册账号、购物下单等等。但是,我们有时候并不想暴露自己的真实手机号码,…

    编程 2024-12-29
  • 使用JavaScript编写手机号码正则校验

    一、正则表达式的构建 在JavaScript中,我们可以使用RegExp对象来创建正则表达式用于校验手机号码的格式是否合法。正则表达式是描述字符模式的一种语法规则。比如要验证手机号…

    编程 2024-12-22
  • js代码填写手机号码(手机上怎么写js代码)

    本文目录一览: 1、jsjs验证11位手机号 2、用js代码怎么生成一个手机号码 3、js验证手机号的相关问题 4、javascript编写验证电话号码的完整代码 5、手机号码正则…

    编程 2024-12-15
  • MySQL中手机号码应该用什么类型

    一、数据库手机号码用什么类型 在MySQL中,手机号码通常使用char或varchar类型。这是因为手机号码通常都是11位数,且不涉及到数值运算。使用char类型可以确保数据的完整…

    编程 2024-12-12
  • 使用JavaScript编写的手机号码正则表达式,有效验证手机号码的正则表达式

    一、正则表达式的概念 正则表达式是一种特殊的字符序列,可以帮助我们匹配文本中的某些模式。在JavaScript中,可以使用RegExp对象实例化正则表达式,并通过它的方法来匹配字符…

    编程 2024-12-12
  • 利用Python对数据进行分析和可视化处理

    一、Python数据分析工具介绍 Python是一种高效的编程语言,具有数据分析和处理的强大功能。Python的数据分析工具主要包括Numpy、Scipy、Pandas和Matpl…

    编程 2024-12-10
  • 如何利用acf和pacf图进行分析

    时间序列是一种非常特殊的数据集,与其他数据集不同的是,它的观测值之间具有时间上的依赖关系。时间序列的预测和建模往往需要考虑这种依赖关系,而acf图和pacf图则是两种可视化时间序列…

    编程 2024-12-03
  • JS正则表达式验证手机号码

    一、JS正则表达式验证手机号码格式 电话号码是指可供拨打的号码,分为固定电话和手机号码。手机号码是由11位数字组成的数字串,其中前三位是网络识别号,一般是13、14、15、16、1…

    编程 2024-12-01
  • 手机号码正确性检测方法详解

    如今,手持智能手机已经成为人们的生活必需品之一。而且,随着各类APP的崛起,手机号码的使用频率也越来越高。而要进行手机号码的正确性检测,可以采用以下的方法。 一、正则表达式 正则表…

    编程 2024-11-29
  • 手机号验证正则表达式:一键精准验证手机号码格式

    一、为什么需要手机号验证正则表达式? 随着移动互联网的不断发展,手机成为人们日常生活中必不可少的通讯工具之一。随之而来的是大量的手机短信、语音验证码的发送以及手机账号登录等功能的使…

    编程 2024-11-25

发表回复

登录后才能评论