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取滚动条的尺寸的函数代码
Nov 30 Javascript
javascript 图片裁剪技巧解读
Nov 15 Javascript
js获取select选中的option的text示例代码
Dec 19 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
Mar 03 Javascript
Javascript闭包(Closure)详解
May 05 Javascript
js实现新年倒计时效果
Dec 10 Javascript
JavaScript中的闭包
Feb 24 Javascript
JavaScript重定向URL参数的两种方法小结
Oct 19 Javascript
快速了解Node中的Stream流是什么
Feb 13 Javascript
vue 开发企业微信整合案例分析
Dec 02 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
Feb 04 jQuery
Vue.js 中制作自定义选择组件的代码附演示demo
Feb 28 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面向对象之多态
2014/08/20 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
smarty模板数学运算示例
2016/12/11 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
VBScript版代码高亮
2006/06/26 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
微信小程序实现随机验证码功能
2018/12/20 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
Python网络爬虫实例讲解
2016/04/28 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
销售团队口号大全
2014/06/06 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
医生个人年终总结
2015/02/28 职场文书
现役军人家属慰问信
2015/03/24 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
招商银行工作证明
2015/06/17 职场文书
Flink 侧流输出源码示例解析
2022/09/23 Servers