delphi MEID校验码算法  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi MEID校验码算法


EID校验码算法: 
(1).将偶数位数字分别乘以2,分别计算个位数和十位数之和,注意是16进制数 
(2).将奇数位数字相加,再加上上一步算得的值 
(3).如果得出的数个位是0则校验位为0,否则为10(这里的10是16进制,,即十进制的16)减去个位数 
如:AF 01 23 45 0A BC DE 偶数位乘以2得到F*2=1E 1*2=02 3*2=06 5*2=0A A*2=14 C*2=1C E*2=1C,计算奇数位数字之和和偶数位个位十位之和,得到 A+(1+E)+0+2+2+6+4+A+0+(1+4)+B+(1+8)+D+(1+C)=64 => 校验位 16-4

 

function TForm1.MeidTail(MEIDStr: string): string;
var
  DEC_Total,DEC_ch,i:integer;
  ch,Hex_oushu,Hex_Total,MEIDT:string;
begin
//'输入MEID前14位,返回MEID第15位,如果返回空值,表示程序出错

  If Length(MEIDStr) <> 14 Then
  begin
    showmessage('MEID越界!');
    ExitProcess(0);
    Application.Terminate;
  end
  else
  begin
    MEIDStr:=UpperCase(MEIDStr);


    DEC_Total:=0;
    for i:=1 to 14 do   // '计算MEID校验位
    begin
      ch:= '$'+copy(MEIDStr,i,1);

      if(i mod 2<>0) then //将奇数位数字相加
      begin
        DEC_ch:=StrToInt(ch); //奇数位数字+$变为16进制,再转换为十进制
      end
      else
      begin    //将偶数位数字分别乘以2,分别计算个位数和十位数之和,注意是16进制数
        Hex_oushu:=inttohex((StrToInt(ch)*2),2);
        DEC_ch:= StrToInt('$'+Hex_oushu[1])+ StrToInt('$'+Hex_oushu[2]);

      end;
      DEC_Total:= DEC_Total + DEC_ch;
    end;
    Hex_Total:=inttohex(DEC_Total,2);
    If Hex_Total[1]= '0' Then
    begin
      MEIDT:= '0';
    end
    Else
    begin
      MEIDT:=inttohex((16-StrToInt('$'+Hex_Total[2])),1);
    End;
    Result:=MEIDT;
  end;
end;

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.22228407859802 seconds