jquery实现手机号码选号的方法


Posted in Javascript onJuly 31, 2015

本文实例讲述了jquery实现手机号码选号的方法。分享给大家供大家参考。具体如下:

前段时间看到联通的自由组合套餐非常诱人于是决定换号,但选号是个非常累人的活在免费的号码列表中选了好久都没选到心仪的号码,于是写了个脚本去分析这些手机号码,虽然不是非常准确,但至少把那堆垃圾号码过滤掉了。欢迎拍砖。

代码依赖jQuery,有兴趣的自己重构去除依赖。

建议使用Chrome浏览器的调试工具执行。

jquery手机号码分析评分:

/*class*/RegexpMatchScorer = function (/*Required RegExp*/reg,
                    /*Required Number*/threshold){
 return function(/*Required char[]*/numberArray){
  if(!!numberArray && !!reg && !!threshold){
   var matcheList = numberArray.join().match(reg);
   if(matcheList != null){
    return matcheList.length * threshold;
   }
  }
  return 0;
 };
}
//分析后8位号码计算号码分数
function analyseNumbers(/*Required String[]*/numberList,
            /*Optional Object{begin,size}*/range,
            /*Optional function(char[])[]*/addtionRules){
 //无4号码计分
 function non4(numberArray){
  var threshold = 4;
  if(!numberArray.inArray("4")){
   return threshold;
  }
  return 0;
 }
 //总数字量加分最高10分
 function numberCount(numberArray){
  var threshold = 10;
  var charCount = uniqueArray(numberArray).length;
  return threshold - ((charCount - 1) * (threshold / (numberArray.length - 1)));
 }
 //重复次数加分
 function adjoinRepeat(numberArray){
  var threshold = 2;
  var score = 0;
  for(var i=1;i<numberArray.length;i++){
   var times = 0;
   if(numberArray[i - 1] == numberArray[i]){
    times++;
    score+=threshold*times;
   }else{
    times=0;
   }
  }
  return score;
 }
 //顺数加分(3位以上)
 function straight(numberArray){
  var threshold = 2.5;
  var sideTimes = 2.5//顺数在两端时2.5倍得分
  var inverseTimes = 0.6
  var score = 0;
  for(var i=2;i<numberArray.length;i++){
   var sTimes = 0;
   var iTimes = 0;
   if((Number(numberArray[i])-1==Number(numberArray[i-1]) && Number(numberArray[i])-2==Number(numberArray[i-2]) && ++sTimes)
    || (Number(numberArray[i])+1==Number(numberArray[i-1]) && Number(numberArray[i])+2==Number(numberArray[i-2]) && ++iTimes)
    ){
    var sc = 0;
    if(i == 2 || i == numberArray.length - 1){
     sc = threshold*sideTimes;//顺数在两端时2.5倍得分
    }else{
     sc = threshold;
    }
    score += sc * (sTimes + iTimes*inverseTimes);
   }else{
    sTimes=0;
    iTimes=0;
   }
  }
  return score;
 }
 //数组去复
 function uniqueArray(parr) {
  function _unique(_arr, i){
   if(i>=_arr.length){
    return;
   }
   if(_arr[i] == _arr[i+1]){
    _arr.splice(i+1,1);
    _unique(_arr,i);
   }else{
    _unique(_arr,i+1);
   }
  }
  var arr=parr.slice().sort();
  _unique(arr,0);
  return arr;
 }
 /*************
 * 计分逻辑
 **************/
 var nonRepeatList = uniqueArray(numberList);
 var scorerList = [non4, numberCount, adjoinRepeat, straight,
          new RegexpMatchScorer(new RegExp("(6|8|9)","g"),0.7)];
 if(!!addtionRules){
  scorerList.concat(addtionRules);
 }
 var scoreTable = [];
 //分析号码
 nonRepeatList.forEach(function(data){
  var score = 0;
  var pn = data.toString();
  if(!!range){
   pn = pn.substr(range.begin, range.size);
  }
  var numberArray = pn.split("");
  scorerList.forEach(function(scorer){
   score += scorer(numberArray.slice());
  });
  //发布分数
  scoreTable.push({"number":data, "score":score});
 });
 return scoreTable;
}

抓取号码列表,分析:

//必须在num.10010.com下执行
var url = "http://num.10010.com/NumApp/GoodsDetail/queryMoreNums?callback=&province=51&cityCode=540&rankMoney=&groupKey=65070778&mid=&q_p=51&net=01&roleValue=&preFeeSel=0&keyValue=&Show4GNum=TRUE&q_p=";
var nl = [];
for(var i=1;i<=50;i++){
 var urli = url+i;
 $.get(urli,function(data,status){
  var _json = eval(data);
  for(var j=0;j<(_json.moreNumArray.length/7);j++){
   var idx = j*7;
   var num = _json.moreNumArray[idx];
   nl.push(num);
  }
 });
}
//待上面代码抓取号码完毕后分析号码
//查XX分以上的号码
(function(sc){var x=[];analyseNumbers(nl,{begin:-8,size:8}).forEach(function(d,i){if(d.score>=sc)x.push(d.number+" : "+d.score);}); return x.sort().join("\n");})
(/*score*/10);

希望本文所述对大家的jquery程序设计有所帮助。

Javascript 相关文章推荐
JS支持带x身份证号码验证函数
Aug 10 Javascript
Js组件的一些写法
Sep 10 Javascript
js关于字符长度限制的问题示例探讨
Jan 24 Javascript
alert和confirm功能介绍
May 21 Javascript
angularJS 中input示例分享
Feb 09 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
layDate插件设置开始和结束时间
Nov 15 Javascript
浅谈Angular7 项目开发总结
Dec 19 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
微信小程序 如何保持登录状态
Aug 16 Javascript
详解ES6 Promise的生命周期和创建
Aug 18 Javascript
javascript文本模板用法实例
Jul 31 #Javascript
Javascript实现网络监测的方法
Jul 31 #Javascript
jquery模拟alert的弹窗插件
Jul 31 #Javascript
JSON字符串转JSON对象
Jul 31 #Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 #Javascript
JavaScript实现快速排序的方法
Jul 31 #Javascript
javascript常用正则表达式汇总
Jul 31 #Javascript
You might like
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
PHP 转义使用详解
2013/07/15 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
关于php开启错误提示的总结
2019/09/24 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
React Native预设占位placeholder的使用
2017/09/28 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
上课不认真检讨书
2014/09/17 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
艺术节开幕词
2015/01/28 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
健康证明
2015/06/19 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS