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 相关文章推荐
Javascript 各浏览器的 Javascript 效率对比
Jan 23 Javascript
javascript 防止刷新,后退,关闭
Aug 07 Javascript
JS+CSS简单树形菜单实现方法
Sep 12 Javascript
详解JavaScript节流函数中的Throttle
Jul 16 Javascript
javascript insertAfter()定义与用法示例
Jul 25 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
原生JS实现匀速图片轮播动画
Oct 18 Javascript
解析Vue2.0双向绑定实现原理
Feb 23 Javascript
js实现一个简单的数字时钟效果
Mar 29 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
Jun 27 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
p5.js绘制旋转的正方形
Oct 23 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
DedeCms模板安装/制作概述
2007/03/11 PHP
php5.3 注意事项说明
2013/07/01 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
获取python文件扩展名和文件名方法
2018/02/02 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
解决Python3下map函数的显示问题
2019/12/04 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
StringBuilder和String的区别
2015/05/18 面试题
大学生就业意向书范文
2014/04/01 职场文书
软件售后服务方案
2014/05/29 职场文书
财务工作个人总结
2015/02/27 职场文书
入党群众意见范文
2015/06/02 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL