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 相关文章推荐
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
Dec 27 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
Nov 20 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
JavaScript判断变量是否为空的自定义函数分享
Jan 31 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
JavaScript手风琴页面制作
May 17 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
微信小程序以ssm做后台开发的实现示例
Apr 08 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
Jun 05 Javascript
Vue实现点击箭头上下移动效果
Jun 11 Javascript
Vue如何实现监听组件原生事件
Jul 03 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
javascript document.images实例
2008/05/27 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
angularjs 源码解析之injector
2016/08/22 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
vue实现搜索功能
2019/05/28 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
使用PDB简单调试Python程序简明指南
2015/04/25 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
如何打开WebSphere远程debug
2014/10/10 面试题
八一建军节部队活动方案
2014/02/04 职场文书
高中物理教学反思
2014/02/08 职场文书
家长寄语大全
2014/04/02 职场文书
公司领导班子对照材料
2014/08/18 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
工作自我评价范文
2019/03/21 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python