php靓号实现逻辑,ID过滤靓号写法(PHP和Nodejs版本)
1 前言
例如某APP的用户ID,需要按照一定规则把靓号先存取来,然后慢慢按要求释放靓号
2 代码
PHP版本如下:
function genUserId(){
$id = "";
$arr = [1,2,3,5,6,7,8,9];
//var arr2 = [0,1,2,3,5,6,7,8,9];
$rand_index = rand(0,7);
$id.=$arr[$rand_index];
for($i = 0; $i < 5; ++$i){
$id .= rand(0,9);
}
if(!$this->reserveNumber($id)){
$flag = $this->isNiceNumber($id);
if($flag){
$this->genUserId();
}
}else{
$this->genUserId();
}
return $id;
}
function reserveNumber($numStr){
if(intval($numStr) <= 100100){
return true;
}
return false;
}
function isNiceNumber($numStr){
// 靓号规则
// 顺子(正顺和反)6顺、5顺,如:123456或654321
// 6连、5连、4同、5同、6同
// 其他:AAACCC、ABCEEE、AAACDE、ABCABC、ABAABA、AABBCC
//AAACCC、AAACDE、ABCEEE、ABCABC、ABAABA、AABBCC、
//转化成整数
$a0 = (int)$numStr[0];
$a1 = (int)$numStr[1];
$a2 = (int)$numStr[2];
$a3 = (int)$numStr[3];
$a4 = (int)$numStr[4];
$a5 = (int)$numStr[5];
//1单
if($this->isSameNumSeries($a1,$a2,$a3,$a4,$a5)){ 单+5同,包含6同
return true;
}else if($this->isLianNumSeries($a1,$a2,$a3,$a4,$a5)){ //单+5连,包含6连
return true;
}
//先处理前两个及以上相同的
if($this->isSameNumSeries($a0,$a1)) { //AABBCC或者AABBAA
if(($a0 == $a2 + 1 || $a0 == $a2 - 1) && $this->isSameNumSeries($a2,$a3)){
if(($a4 == $a2 + 1 || $a4 == $a2 - 1) && $this->isSameNumSeries($a4,$a5)){
return true;
}
}else if($this->isSameNumSeries($a2,$a3,$a4,$a5)){ //4同+前面1对
if($this->isSameNumSeries($a0,$a1)){
return true;
}
}
}
if($this->isSameNumSeries($a0,$a1,$a2)){ //AAACCC、AAACDE、ABCEEE、ABCABC、ABAABA、AABBCC、100000
if($this->isSameNumSeries($a3,$a4,$a5)){ //AAACCC
return true;
}else if($this->isLianNumSeries($a3,$a4,$a5)){ //AAACDE
return true;
}else if($this->isSameNumSeries($a0,$a1,$a2,$a3)){ //4同+后面1对
if($this->isSameNumSeries($a4,$a5)){
return true;
}else if($this->isSameNumSeries($a0,$a4)){ //5同+单
return true;
}
}
}else if($this->isLianNumSeries($a0,$a1,$a2)){ //ABCEEE、ABCABC
if($this->isSameNumSeries($a3,$a4,$a5)){ //ABCEEE
return true;
}else if($this->isSameNumSeries($a0,$a3) && $this->isSameNumSeries($a1,$a4) && $this->isSameNumSeries($a2,$a5)){ //ABCABC
return true;
}else if($this->isLianNumSeries($a0,$a1,$a2,$a3,$a4)){ //5连+单
return true;
}
}else if($this->isSameNumSeries($a1,$a4)){
if($this->isSameNumSeries($a0,$a2,$a3,$a5)){ //ABAABA
return true;
}
}
return false;
}
function isSameNumSeries(){
$len= func_num_args();
$flag = false;
$count = 0;
for($i = 0; i < $len; $i++){
if(func_get_arg(i) == func_get_arg(0)){
$count++;
}else{
return false;
}
}
if($count == $len){
$flag = true;
}
return $flag;
}
function isLianNumSeries(){
$len= func_num_args();
$flag = false;
$count = 0;
$asc = 1;
if(!(func_get_arg(0) == func_get_arg($len-1) + ($len-1) || func_get_arg(0) == func_get_arg($len-1) - ($len-1))){
return false;
}
if(func_get_arg(0) > func_get_arg($len-1)){
$asc = -1;
}
for($i = 1; $i < $len; $i++){
if(func_get_arg($i-1) + $asc == func_get_arg($i)){ //升序
$count++;
}
}
if($count == $len-1){
$flag = true;
}
return $flag;
}
Nodejs版本如下:
function genUserId(){
// ID位数:6位数。
// 默认不带四,第一位不能是0,即“100588”;
// 保证唯一性、无序性;
// 保证ID运算速度快,考虑到6位需要运算和去重;
// a.做ID池子,随机打乱,然后分配ID;
// b.做拼接,前三位+后三位,然后依次做去重,有两两重复则重新生成;
// 用户ID与推广ID一致;
var id = "";
var arr = [1,2,3,5,6,7,8,9];
//var arr2 = [0,1,2,3,5,6,7,8,9];
var rand_index = Math.floor(Math.random()*arr.length);
id+=arr[rand_index];
for(var i = 0; i < 5; ++i){
id += Math.floor(Math.random()*10);
}
if(!reserveNumber(id)){
var flag = isNiceNumber(id);
if(flag){
genUserId();
}
}else{
genUserId();
}
console.log("gen userid="+id);
return id;
}
function reserveNumber(numStr){
if(parseInt(numStr) <= 100100){
return true;
}
return false;
}
function isNiceNumber(numStr){
// 靓号规则
// 顺子(正顺和反)6顺、5顺,如:123456或654321
// 6连、5连、4同、5同、6同
// 其他:AAACCC、ABCEEE、AAACDE、ABCABC、ABAABA、AABBCC
//AAACCC、AAACDE、ABCEEE、ABCABC、ABAABA、AABBCC
//转化成整数
var a0 = numStr[0] - 0;
var a1 = numStr[1] - 0;
var a2 = numStr[2] - 0;
var a3 = numStr[3] - 0;
var a4 = numStr[4] - 0;
var a5 = numStr[5] - 0;
//1单
if(isSameNumSeries(a1,a2,a3,a4,a5)){ 单+5同,包含6同
return true;
}else if(isLianNumSeries(a1,a2,a3,a4,a5)){ //单+5连,包含6连
return true;
}
//先处理前两个及以上相同的
if(isSameNumSeries(a0,a1)) { //AABBCC或者AABBAA
if((a0 == a2 + 1 || a0 == a2 - 1) && isSameNumSeries(a2,a3)){
if((a4 == a2 + 1 || a4 == a2 - 1) && isSameNumSeries(a4,a5)){
return true;
}
}else if(isSameNumSeries(a2,a3,a4,a5)){ //4同+前面1对
if(isSameNumSeries(a0,a1)){
return true;
}
}
}
if(isSameNumSeries(a0,a1,a2)){ //AAACCC、AAACDE、ABCEEE、ABCABC、ABAABA、AABBCC
if(isSameNumSeries(a3,a4,a5)){ //AAACCC
return true;
}else if(isLianNumSeries(a3,a4,a5)){ //AAACDE
return true;
}else if(isSameNumSeries(a0,a1,a2,a3)){ //4同+后面1对
if(isSameNumSeries(a4,a5)){
return true;
}else if(isSameNumSeries(a0,a4)){ //5同+单
return true;
}/*else if(isSameNumSeries(a0,a1,a2,a3,a4,a5)){ //6同
return true;
}*/
}
}else if(isLianNumSeries(a0,a1,a2)){ //ABCEEE、ABCABC
if(isSameNumSeries(a3,a4,a5)){ //ABCEEE
return true;
}else if(isSameNumSeries(a0,a3) && isSameNumSeries(a1,a4) && isSameNumSeries(a2,a5)){ //ABCABC
return true;
}else if(isLianNumSeries(a0,a1,a2,a3,a4)){ //5连+单
return true;
}/*else if(isLianNumSeries(a0,a1,a2,a3,a4,a5)){ //6连
return true;
}*/
}else if(isSameNumSeries(a1,a4)){
if(isSameNumSeries(a0,a2,a3,a5)){ //ABAABA
return true;
}
}
return false;
}
function isSameNumSeries(){
var len= arguments.length;
var flag = false;
var count = 0;
for(var i = 0; i < len; i++){
if(arguments[i] == arguments[0]){
count++;
}else{
return false;
}
}
if(count == len){
flag = true;
}
return flag;
}
function isLianNumSeries(){
var len= arguments.length;
var flag = false;
var count = 0;
var asc = 1;
if(!(arguments[0] == arguments[len-1] + (len-1) || arguments[0] == arguments[len-1] - (len-1))){
return false;
}
if(arguments[0] > arguments[len-1]){
asc = -1;
}
for(var i = 1; i < len; i++){
if(arguments[i-1] + asc == arguments[i]){ //升序
count++;
}
}
if(count == len-1){
flag = true;
}
return flag;
}
3 小结
上述代码是默认ID是6位数,如果是位数更多,则只需在这个代码上多封装一层,就可以实现几位都可以的靓号过滤。如果用正则表达式来写,代码量会更少,显得更简洁些。
php靓号实现逻辑,ID过滤靓号写法(PHP和Nodejs版本)相关推荐
- 如何通过公众号的原始ID获取二维码?
如何通过微信公众号的原始ID获取公众号的二维码呢? 我们可以通过官方提供的API开放接口实现,具体使用方式如下: 目录 1.如何获取公众号原始ID? 2.公众号原始ID生成微信公众号二维码 1.如何获 ...
- php mysql 预留靓号_ID过滤靓号写法(PHP和Nodejs版本)
1 前言 例如某APP的用户ID,需要按照一定规则把靓号先存取来,然后慢慢按要求释放靓号 2 代码 PHP版本如下: function genUserId(){ $id = ""; ...
- Atitit 手机号码选号 规范 流程 attilax总结 v4 s81.docx 1. Keyword关键词 2 2. 靓号的定义 2 3. 靓号的重要意义 与解决问题 为什么我们需要靓号
Atitit 手机号码选号 规范 流程 attilax总结 v4 s81.docx 1. Keyword关键词 2 2. 靓号的定义 2 3. 靓号的重要意义 与解决问题 为什么我们需要靓号指南, ...
- 您的号码[1681267]是靓号中的七位靓号
我的号码 您的号码[1681267]是靓号中的七位靓号.您的号码现在正常使用中. 我的状态 您开通了会员服务.您是预付费用户,到期时间为2008-10-08 QQ会员包月服务,资费10元/月,客服电话 ...
- AIR32F103(九) CAN总线的通信和ID过滤机制及实例
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- 微信网页版前端源码分析(一)源码结构和公众号处理逻辑
(原创,转载请注明出处) 一.微信网页版前端结构 微信网页版为angular应用. angular应用启动代码 angular.bootstrap(document, ["webwxApp& ...
- go语言实战-----29-----公众号开发逻辑、注册、权限处理、消息回复
一 微信公众号开发逻辑 下面按照以下几点进行讲解微信公众号开发逻辑. 1)注册公众号. 2)开发者权限. 3)微信公众号后台接口权限. 4)公众号消息回复. 5)服务器配置. 1 注册公众号 注册地址 ...
- R语言dplyr包filter函数通过逻辑条件过滤数据实战
R语言dplyr包filter函数通过逻辑条件过滤数据实战 目录 R语言dplyr包filter函数通过逻辑条件过滤数据实战 #导入dplyr包 #仿真数据
- php 公众号 模板消息id如何获取_微信公众号后台模板消息如何实现发送的功能...
在公众平台实现发送模板消息功能,只能通过公众平台的接口开发实现,或者通过第三方平台微号帮功能模板消息群发实现,均能为微信公众号发送模板消息功能,模板消息发送不占用公众号每月的群发次数,模板消息仅用于公 ...
最新文章
- Jquery判断单选框是否选中和获取选中的值
- id设置为10000开始
- python爬虫招聘-Python爬虫实战-抓取boss直聘招聘信息
- python join字符连接函数的使用方法
- C#当中的BeginInvoke和EndInvoke
- 8月日更,我的困难与感悟
- 如何用纯 CSS 创作一双黑暗中的眼睛
- oracle 查出所有空表,Oracle查看某个用户上的所有空表
- 【iOS-Cocos2d游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展Cocos2d源码的CCAnimation简化动画创建!...
- c语言删除行尾的空格,新人提问:如何将输出时每行最后一个空格删除
- SQLSERVER函数判断当天是星期几
- UE4 创建编辑器模块
- 点云配准(四) 四元数与旋转变换
- 日系P2P原理探究(一) — Winny元祖: Freenet
- VC使用: vs2003的工程升级到vs2010的问题汇总
- JS:酷酷的圆轨迹唤动菜单
- B+树在MySQL索引的应用和InnoDB的索引优化
- 十四、策略模式——你要黄焖鸡、手撕鸡、大盘鸡、叫花鸡都可以,指定一个吧
- 人为什么要好好努力学习工作
- Excel技巧【标记多行数据连续一样的行】【第一个单元格公式适用于所有本列所有行】【按照逗号分列】【快速统计出各个项出现的次数】【冻结窗口】[表格分段选择数据][根据单元格内容引索其他单元格数据指针]