M1卡的序列号如何转换?

superfireware 2013-12-13 04:12:51
公司做一个IC卡读写的项目,用的卡是M1卡,因为要和别的系统对接,并且卡信息是写在别的系统里的,读出卡的序列号之后需要转换。我用的深圳明华澳汉的RF35读卡器,最终转换出来的卡号有的正确,有的错,还有负数。有没有做过这方面的请指导一下。
以下是我的序列号转换代码:

function HexCharToInt(HexToken: char): integer;
begin
if HexToken > #97 then
HexToken := Chr(Ord(HexToken) - 32);
Result := 0;
if (HexToken > #47) and (HexToken < #58) then { chars 0....9 }
Result := Ord(HexToken) - 48
else if (HexToken > #64) and (HexToken < #71) then { chars A....F }
Result := Ord(HexToken) - 65 + 10;
end;

function Ncf(num, f: integer): integer;
var
i: integer;
begin
Result := 1;
if f = 0 then exit;
for i := 1 to f do begin
result := result * num;
end;
end;

function HexToInt(hex: string): integer;
var
i: integer;
begin
result := 0;
hex := AnsiUpperCase(Trim(hex));
if hex = '' then
exit;
for i := 1 to length(hex) do
result := result + HexCharToInt(hex[i]) * Ncf(16, length(hex) - i);
end;

function TransEx(Msg: string): string;
var
i: integer;
Str: string;
begin
i := 1;
Str := '';
while i < length(Msg) do begin
Str := Msg[i] + Msg[i+1]+ Str ;
i := i + 2;
end;
result := Str;
end;

//读卡
procedure BtnReadClick(Sender: TObject);
var HexSnr, TransHexSnr: String;
icdev, snr, i: longint;//icdev设备ID,snr卡序列号,i转换后的卡号
begin
rf_Card(icdev, 1, snr); //读取卡序列号到snr
//转换卡序列号
HexSnr:=Format('%x', [snr]);
TransHexSnr:=TransEx(HexSnr);
i:=HexToInt(TransHexSnr);
end;
...全文
590 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
superfireware 2013-12-13
  • 打赏
  • 举报
回复
附上几个测试数据 snr=1440540709,i=636017749,正确。 snr=1440554261,i=354278741,正确。 snr=1440496837,i=-985867179,错误。

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧