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 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
JS getStyle获取最终样式函数代码
Apr 01 Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 Javascript
利用jQuary实现文字浮动提示效果示例代码
Dec 26 Javascript
使用jsonp完美解决跨域问题
Nov 27 Javascript
jQuery中removeClass()方法用法实例
Jan 05 Javascript
JS判断是否360安全浏览器极速内核的方法
Jan 29 Javascript
Node.js操作Firebird数据库教程
Mar 04 Javascript
AngularJS 单选框及多选框的双向动态绑定
Apr 20 Javascript
兼容浏览器的js事件绑定函数(详解)
May 09 Javascript
react-router-dom 嵌套路由的实现
May 02 Javascript
JavaScript随机数的组合问题案例分析
May 16 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的ASCII码转换类
2013/07/05 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
javascript IFrame 强制刷新代码
2009/07/23 Javascript
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
Python聊天室实例程序分享
2016/01/05 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Python接口测试文件上传实例解析
2020/05/22 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
秋季运动会活动方案
2014/02/05 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
《赶海》教学反思
2014/04/20 职场文书
2015年推普周活动总结
2015/03/27 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python