判断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'; ...
随机推荐
- QML之TextEdit
TextEdit显示一个可编辑的,有格式的文本框.它也可以显示明文和富文本.例如:TextEdit { width: 240 text: "<b>Hello</ ...
- iOS: 学习笔记, 值与引用类型(译自: https://developer.apple.com/swift/blog/ Aug 15, 2014 Value and Reference Types)
值和引用类型 Value and Reference Types 在Swift中,有两种数据类型. 一是"值类型"(value type), 它是每一个实例都保存有各自的数据,通常 ...
- JS贪吃蛇游戏
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Uva_11427 Expect the Expected
题目链接 题意: 你玩纸牌, 如果当天晚上你赢的局数比例 大于 p, 就去睡觉, 第二天继续. 如果小于等于p, 就去睡觉, 并且以后都不玩了. 每晚最多玩n局, 每局赢的概率为p , 求玩的天数的期 ...
- C#Lambda表达式学习日记
Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的使用. 现在,如果我们要使用泛型 List<> 的 FindAll() 方法,当你从一个集合去提取子集时,可 ...
- Microsoft HoloLens 技术解谜(上)
HoloLens 是什么? HoloLens 是微软发布的可穿戴式增强现实计算设备,它拥有这么几个关键要素: 它是增强现实产品,即 Augmented Reality(AR),AR 技术将计算机生成的 ...
- C语言中结构体对齐问题
C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...
- Spring MVC 解读——<context:component-scan/>
转自:http://my.oschina.net/HeliosFly/blog/203149 作者:GoodLoser. Spring MVC 解读---<context:component-s ...
- Oracle导出存储过程
SQL> SELECT * FROM dba_directories ; OWN DIRECTORY_NAME DIRECTORY_PATH ------- ------------------ ...
- 【JS】JS外联不执行,内联执行
匹配域名http://lb.qq.com 或 http://lb.l.qq.com