判断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),且长度不为15return 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是否合法相关推荐

  1. 移动端设备ID标识整理(IMEI、MEID、ICCID...

    移动设备ID信息 在移动端产品的开发中,如何定位一台设备,定位一个人,是一个棘手的问题,在适配的过程中也会遇到千奇百怪的情况.本文介绍了常用的设备ID以及标识设备的方法与一些常见问题. 移动设备ID可 ...

  2. IMEI, ESN, MEID

    IMEI international mobile equipment identity GSM分配,15位数字,最后一个是校验码 MEID Mobile equipment Identifier T ...

  3. IMSI、IMEI和MEID(ESN)

    ESN (Electronic Serial Numbers):电子序列号.在CDMA 系统中,是鉴别一个物理硬件设备唯一的标识.也就是说每个手机都用这个唯一的ID来鉴别自己, 就跟人的身份证一样.一 ...

  4. 关于IMEI、MEID、IMSI

    关于IMEI.MEID.IMSI 简介 IMEI.MEID都是用于标识一台物理设备的ID信息.在Android 8.0以下系统提供的API中,会根据不同条件返回二者之一的信息. IMEI: 国际移动设 ...

  5. IMEI/ESN/MEID号码

    IMEI/ESN/MEID号码 1.引言     正规的手机产品,在手机软件里面.手机背面以及手机的包装盒子上都是标识有IMEI号码或MEID号码的,这三个号码完全一致的话,才表示这个产品是由这个正规 ...

  6. python判断ip地址是否合法_python实现判断一个字符串是否是合法IP地址的示例

    一个刚结束的笔试题目,简单贴一下吧,下面是具体实现: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:判断一个字符串是否是合法I ...

  7. C# 判断一字符串是否为合法数字(正则表达式)

    代码 /// <summary>         /// 判断一个字符串是否为合法整数(不限制长度)         /// </summary>         /// &l ...

  8. python判断合法整数数字_C# 判断一字符串是否为合法数字(正则表达式)

    判断一个字符串是否为合法整数(不限制长度) public static bool IsInteger(string s) { string pattern = @"^\d*$"; ...

  9. C#开发笔记之09-如何用C#判断社会信用代码是否合法?

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#开发笔记之09-如何用C#判断社会信用代码是否合法? | .Net中文网. C#开发笔记概述 概述 法人和其他组织统一社会信用代码 ...

最新文章

  1. 谷歌正式推出官方“Android界面设计”网站
  2. Gesture Based TableView
  3. mysql常见关键字
  4. mysql连接数紧张_Mysql 查看连接数,状态,最大并发数
  5. SAP产品和3D渲染技术的结合-使用JavaScript的开源3D渲染库实现
  6. java dfa_java 实现DFA 算法(理论百度搜索)
  7. spring 注释_Spring @Value注释
  8. mysql 以 db 结尾_MySQL的高级部分
  9. zookeeper 单机和集群搭建(windows环境+linux环境)
  10. Java 数组排序及元素查找
  11. 内容管理系统测试实战
  12. spark mlib坐标矩阵(Coordinate Matrix)
  13. ARPG游戏打击感相关的技术简单总结
  14. 二叉树前中后/层次遍历的递归与非递归形式(c++)
  15. java反编译使用报错_Java反编译class
  16. 中国研发经费投入逼近2万亿,保持两位数增速,企业成为主要力量
  17. c语言投票程序设计,C语言课程设计-投票程序设计.doc
  18. sublimit 编辑器扩展_字幕编辑器(Srt Sub Master)
  19. 《计算机网络(第七版)谢希仁 编著》第一章内容总结及部分解题
  20. 移动端电影院社交来啦 约上ta看一场电影

热门文章

  1. 构建安全的计算机网络报告,计算机网络与安全实践设计报告 矿大资料.doc
  2. 【重难点】【JVM 02】反射在 JVM 层面的实现流程、Class.forName() 和 ClassLoader.loadClass 的区别
  3. “双击Pycharm无响应”解决方案
  4. [BUAA软工]beta阶段贡献分
  5. Oreilly.Python.Cookbook(3rd.Edition.May.2013)pdf
  6. 洛谷P4092树——并查集
  7. 精神独立,才是一个人最大的底气
  8. --------》》》》【醒目】一些比较有用的东西
  9. TCP UDP IP
  10. Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】