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 相关文章推荐
jQuery Autocomplete自动完成插件
Jul 17 Javascript
利用webqq协议使用python登录qq发消息源码参考
Apr 08 Javascript
JS将光标聚焦在文本最后的实现代码
Mar 28 Javascript
详解javascript数组去重问题
Nov 06 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
js实现的xml对象转json功能示例
Dec 24 Javascript
js从输入框读取内容,比较两个数字的大小方法
Mar 13 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
Mar 27 jQuery
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
vue 里面使用axios 和封装的示例代码
Sep 01 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
ES6实现图片切换特效代码
Jan 14 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/12/19 PHP
php无限遍历目录示例
2014/02/21 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
js 事件小结 表格区别
2007/08/13 Javascript
日期 时间js控件
2009/05/07 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
2015/08/27 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
python执行get提交的方法
2015/04/29 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
python代码中怎么换行
2020/06/17 Python
Python pathlib模块使用方法及实例解析
2020/10/05 Python
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
毕业生就业推荐信范文
2013/12/01 职场文书
新三好学生主要事迹
2014/01/23 职场文书
怎么写好自荐书
2014/03/02 职场文书
开工仪式策划方案
2014/05/23 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL