判断IMEI或MEID是否合法
/*-----------------------------------------------
* 判断此字串所代表的IMEI或MEID是否合法
* @param imei
* @author Helin 2014-08-21 add
* @return boolen
* IMEI校验码算法:
* (1).将偶数位数字分别乘以2,分别计算个位数和十位数之和
* (2).将奇数位数字相加,再加上上一步算得的值
* (3).如果得出的数个位是0则校验位为0,否则为10减去个位数
* 如:35 89 01 80 69 72 41 偶数位乘以2得到5*2=10 9*2=18 1*2=02 0*2=00 9*2=18 2*2=04 1*2=02,计算奇数位数字之和和偶数位个位十位之和,得到 3+(1+0)+8+(1+8)+0+(0+2)+8+(0+0)+6+(1+8)+7+(0+4)+4+(0+2)=63 => 校验位 10-3 = 7
-----------------------------------------------*/
function is_IMEI($imei=''){
if(!$imei){return false;}
$imeiLen = strlen($imei);
$DeOrHex = 10;//初始化,先假设此字串为IMEI::纯数字
for($j = 0;$j < $imeiLen;$j++){
$c = $imei[$j];
if(is_numeric($c)){
continue;
}else if( ( $c >= 'A' && $c <= 'F' ) || ( $c >= 'a' && $c <= 'f' ) ){
$DeOrHex = 16;
}else{//如果出现数字和16进制数之外的字符,直接判断不合法
return false;
}
}
if($DeOrHex==10 && $imeiLen != 15){//全是数字(IMEI),且长度不为15
return false;
}
if($DeOrHex==16){//包含合法的16进制数(MEID)
if($imeiLen == 14){//新规定,14位MEID,直接合法,不做校验
return true;
}
if($imeiLen != 14 && $imeiLen != 15){
return false;//如果MEID长度不是14也不是15,直接判断为非法,无需校验
}
}
$count = 0;
for($i = 0;$i < 7;$i++){
$tmp1 = hexdec($imei[$i*2]);//若为16进制字符,则转化为10进制:hexdec('a') == 10;
$tmp2 = hexdec($imei[$i*2+1]) * 2;
$count += $tmp1 + floor($tmp2 / $DeOrHex) + $tmp2 % $DeOrHex;
}
$endInt = $count % $DeOrHex;//和数的最后一位数
$parityBit = $endInt > 0 ? $DeOrHex - $endInt : 0;//校验位
return $parityBit == hexdec($imei[14]);
}
$imei = 'a00000426d46cd';//'863139026095804';
echo is_IMEI($imei)?1:0;
echo '<hr>';
判断IMEI或MEID是否合法的更多相关文章
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
- C# 判断一字符串是否为合法数字(正则表达式)
判断一个字符串是否为合法整数(不限制长度) public static bool IsInteger(string s) { string pattern = @"^\d*$"; ...
- python实现判断一个字符串是否是合法IP地址
#!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:判断一个字符串是否是合法IP地址 ''' import re def jud ...
- SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Prob ...
- SDUT-2140_判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个有向图,判 ...
- 判断一个字符串是否是合法IP地址
# -*- coding: utf-8 -*- """ @File:test06_判断ip地址是否合法.py @E-mail:364942727@qq.com @Time ...
- 判断括号字符串是否为合法+求n对括号的所有组合
n对括号的有效组合数 参考:https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0 import java.util.Ar ...
- 【剑指offer】判断出栈序列是否合法
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应 ...
- 判断一个字符串是否为合法IP
输入任意一个字符串,判断是否为合法IP bool IsIPAddress(const char * str){ //先判断形式是否合法, //检查是否只包含点和数字 ; str[i] != '\0'; ...
随机推荐
- about Red_Hat_Enterprise_Linux_7
systemd systemd 是 Linux 的系统和服务管理程序,替换了 Red Hat Enterprise Linux 之前的发行本中使用的 SysV.systemd 与 SysV 和 Lin ...
- JSP特点
建立在servlet规范功能之上的动态网页技术. JSP文件在用户第一次请求时,会被编译成servlet,然后由servlet处理用户的请求.所以JSP可以看成运行时servlet. 1).将内容的生 ...
- python相关的工具
在使用python的时候,发现Adaconda工具包真的很不错,里面集合了很多的工具,并且,自带了很多的python常用模块 另外,PyCharm编辑器也是不错的,界面清晰,可以实现数据的可视化
- 解决Tomcat无法加载css和js等静态资源文件
解决思路有两个 一是,你使用了Apache服务器,html不交给Tomcat处理,所以你找不到Html等静态资源,所以你先停掉阿帕奇,然后只用Tomcat猫试试. 二是,像我一样,使用了Jetty开发 ...
- iOS-NSString-Base64String-Base64原理
之前看到好多人找Str2Base64Str,还有好多自己写了方法的,仔细研究了下base64的编码原理(这个我写在下面),发现官方的API已经可以完成这项功能,这里贴出来供大家参考. 一言不合就上代码 ...
- 【Windows 8】pid为4的system进程占用80端口的解决办法
因为Apache无法启动的原因,用netstat命令查看了一下80端口是否被占用了,如下: C:\Users\Maple>netstat -ano | findstr TCP LISTENING ...
- 关于sql语句in的使用注意规则( 转)
select * from tuser where userno not in(select userno from filter_barcode) 上面这条语句子查询里,userno 并不存在fil ...
- Spring - Sring MVC入门
2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...
- 最详细在Windows安装Xamarin.iOS教程
最详细在Windows安装Xamarin.iOS教程 来源:http://www.cnblogs.com/llyfe2006/articles/3098280.html 本文展示了如何设立Xamari ...
- ZOJ Problem Set - 3758 素数
Singles' Day Time Limit: 2 Seconds Memory Limit: 65536 KB Singles' Day(or One's Day), an unofficial ...