/*-----------------------------------------------
* 判断此字串所代表的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
-----------------------------------------------*/

  1. function is_IMEI($imei=''){
  2. if(!$imei){return false;}
  3. $imeiLen = strlen($imei);
  4. $DeOrHex = 10;//初始化,先假设此字串为IMEI::纯数字
  5. for($j = 0;$j < $imeiLen;$j++){
  6. $c = $imei[$j];
  7. if(is_numeric($c)){
  8. continue;
  9. }else if( ( $c >= 'A' && $c <= 'F' ) || ( $c >= 'a' && $c <= 'f' ) ){
  10. $DeOrHex = 16;
  11. }else{//如果出现数字和16进制数之外的字符,直接判断不合法
  12. return false;
  13. }
  14. }
  15. if($DeOrHex==10 && $imeiLen != 15){//全是数字(IMEI),且长度不为15
  16. return false;
  17. }
  18. if($DeOrHex==16){//包含合法的16进制数(MEID)
  19. if($imeiLen == 14){//新规定,14位MEID,直接合法,不做校验
  20. return true;
  21. }
  22. if($imeiLen != 14 && $imeiLen != 15){
  23. return false;//如果MEID长度不是14也不是15,直接判断为非法,无需校验
  24. }
  25. }
  26. $count = 0;
  27. for($i = 0;$i < 7;$i++){
  28. $tmp1 = hexdec($imei[$i*2]);//若为16进制字符,则转化为10进制:hexdec('a') == 10;
  29. $tmp2 = hexdec($imei[$i*2+1]) * 2;
  30. $count += $tmp1 + floor($tmp2 / $DeOrHex) + $tmp2 % $DeOrHex;
  31. }
  32. $endInt = $count % $DeOrHex;//和数的最后一位数
  33. $parityBit = $endInt > 0 ? $DeOrHex - $endInt : 0;//校验位
  34. return $parityBit == hexdec($imei[14]);
  35. }
  36.  
  37. $imei = 'a00000426d46cd';//'863139026095804';
  38. echo is_IMEI($imei)?1:0;
  39. echo '<hr>';

判断IMEI或MEID是否合法的更多相关文章

  1. 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))

    sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个有向图 ...

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

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

  3. python实现判断一个字符串是否是合法IP地址

    #!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:判断一个字符串是否是合法IP地址 ''' import re def jud ...

  4. SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列

    数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Prob ...

  5. SDUT-2140_判断给定图是否存在合法拓扑序列

    数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个有向图,判 ...

  6. 判断一个字符串是否是合法IP地址

    # -*- coding: utf-8 -*- """ @File:test06_判断ip地址是否合法.py @E-mail:364942727@qq.com @Time ...

  7. 判断括号字符串是否为合法+求n对括号的所有组合

    n对括号的有效组合数 参考:https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0 import java.util.Ar ...

  8. 【剑指offer】判断出栈序列是否合法

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应 ...

  9. 判断一个字符串是否为合法IP

    输入任意一个字符串,判断是否为合法IP bool IsIPAddress(const char * str){ //先判断形式是否合法, //检查是否只包含点和数字 ; str[i] != '\0'; ...

随机推荐

  1. 【python之旅】python的基础二

    一.集合的操作 1.什么是集合?     集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重:把一个列表变成集合,就自动去重 关系测试:测试两组数据之前的交集,差集,并集等关系   2.常用 ...

  2. Day22 JSONP、瀑布流

    一.JSONP JSONP a.Ajax $.ajax({ url:'/index/', dataType:'json', data:{}, type:'GET', success:function( ...

  3. 将图片文件转换为.py文件

    最近用wxpython写了一个脚本,其中要给窗体设置图标文件,需要单独的一个ico文件,这样就比较影响美观,另外打包的时候还要将图标文件一起打包很繁琐.这时候看到wxpython文件有一个工具img2 ...

  4. Django设置TIME_ZONE和LANGUAGE_CODE为中国区域

    Django默认的timezone是 TIME_ZONE = 'America/Chicago' LANGUAGE_CODE = 'en-us' 设置为中国区域: TIME_ZONE = 'Asia/ ...

  5. TaskMgr C#技术拾遗

    1. DataGridView和ContextMenuStrip的绑定是发生在DataGridView的CellMouseClick事件,在事件中指定右键菜单弹出: 2. DataGridView的列 ...

  6. Java语言基础(三) Java注释

    Java注释 Java提供了三种注释的方式: ①单行注释:// ②多行注释:/*  ...  */ ③归档(JavaDoc)注释: /** * 作者:heyiyong * 时间:2013年11月27日 ...

  7. 用F340 GPIO做I2C

    在和Qinheng开发小尺寸点灯治具中,F340和FPGA采用I2C通信,其中F340作为I2C的主机,I2C端口用自己的GPIO编写,总结遇到的问题及注意事项: 1.  F340端口及上拉电阻设置: ...

  8. Android开源项目发现--- 工具类依赖注入DI篇(持续更新)

    通过依赖注入减少View.服务.资源简化初始化,事件绑定等重复繁琐工作 1. AndroidAnnotations(Code Diet) android快速开发框架 项目地址:https://gith ...

  9. HTTP, W3SVC, WAS 和 W3WP

    IIS 请求主要模块        当客户端向 IIS 发出 HTTP 请求时,会有很多事情发生. 有许多内核模式和本机模式组件,用于将请求路由到最终响应请求的 W3WP 进程.       响应一个 ...

  10. 【HDOJ】2830 Matrix Swapping II

    简单DP. /* 2830 */ #include <iostream> #include <string> #include <map> #include < ...