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 面向对象之命名空间
May 04 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 Javascript
深入分析Javascript跨域问题
Apr 17 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
Aug 25 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
浅谈js的解析顺序 作用域 严格模式
Oct 23 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
Sep 15 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
layui自定义插件citySelect实现省市区三级联动选择
Jul 26 Javascript
学习LayUI时自研的表单参数校验框架案例分析
Jul 29 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 header函数分析详解
2011/08/06 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
PHP中STDCLASS用法实例分析
2016/11/11 PHP
javascript实现的listview效果
2007/04/28 Javascript
js GridView 实现自动计算操作代码
2009/03/25 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
vue中render函数的使用详解
2018/10/12 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
解决vue安装less报错Failed to compile with 1 errors的问题
2020/10/22 Javascript
Python常用模块介绍
2014/11/21 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
小学师德标兵先进事迹材料
2014/05/25 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
台风停课通知
2015/04/24 职场文书
民事起诉书范本
2015/05/19 职场文书
妈妈别哭观后感
2015/06/08 职场文书
《正比例》教学反思
2016/02/23 职场文书
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技