儿童预防接种信息管理系统接种点客户端磁卡卡面号码转换为磁条号码项目

客户需求:

由于要发行新卡,但是这个软件没有写磁卡的功能,用HCE300 系列写磁卡软件写的磁卡在软件内读出时无法读出正确的对应的卡面号码,需要分析卡面号码与磁条号码的转换算法,写出转换程序。

分析过程:

1、 RESSCOPE 打开软件没有找到对应的界面资源,客户提醒在 Rcjz.dll.dll 文件中。用 RESSCOPE 打开,找到了对应的对话框资源。查找到一个编辑框控件  EditCardNo:TEdit 

有三个事件和对应的响应函数,分别是:

OnExit = EditCardNoExit

OnKeyDown = FormKeyDown

OnKeyPress = EditCardNoKeyPress

WINHEX 打开 RCJZ..DLL  查找 EditCardNoExit 、  EditCardNoKeyPress  ,它们对应的处理函数地址为:

EditCardNoExit :  007380DC

EditCardNoKeyPress  00738D68  

2、 OD载入主程序  EPI.exe  ,运行到发卡界面。 Alt+M  找到  RCJZ.DLL 载入地址, F2  下断点。进入了 RCJZ.DLL 领空,分别找到后面为  80DC  8D68 的地址,对应为 036380DC 03638D68  。在它们的入口下断点。 F9  回到主界面,输入 ; 2056948222  ,输入分号时无显示(为什么?后面会说)。每次输入都会激活 03638D68  ,其中有些检测代码包括分号的检测,如果输入分号开头就会自动进行磁条号码到卡面号码的转换,否则不会。输入完成后,回到主界面,点击‘确定’按钮,但不要松开鼠标,激活了 03680DC  地址(如果没有在 03680DC  下断点编辑框里就有对应的卡面号码,说明这个地址开始的代码进行了转换)。继续跟踪,主要代码是三个循环,它们实现以下功能:

有几个基本码:

4065729813

5290673148

83641752

423901856742390185674239018567

以输入磁条号码 2056948222  为例,对后八个数字进行转换:

(1) 进行如下转换

56948222   A 4065729813 B 5290673148  C

A )中的第 1 个数字 出现在( B )中第 4 个位置,( C )中第 4 个位置为 0

            2       6                 3                           9  ^

            3       9                 7                           3  |

            4       4                 1                           5  |

            5       8                 8                           1  |

            6       2                 6                           7  |

            7       2                 6                           7  |

            8       2                 6                           7  |

从下往上念为:77715390  D

2 )进行如下转换

先对基本号码83641752  进行转换,依次找到

1 2 3 4 5 6 7 83641752  中的位置为:

5 8 2 4 7 3 6 1 E

以(E )中的数字为下标,依次找到( D )中的对应的值:

位置

5 5

8 0

2 7

4 1

7 9

3 7

6 3

1 7

值合成即:50719737  F

(3) 进行如下转换

423901856742390185674239018567 (G)

从(F )中最后的数字  和输入的第二个数字  的和再除余 10  的结果(即( 7+0 %10 )) 为开始位置取(G )中的 10  个数字,为  5674239018 

找(F )第 1 个数字  在  5674239018  中的位置为 数组下标为  0

          2       0     6742390185           7            6

          3       7      7423901856          1            0

          4       1       4239018567         6            5

          5       9        2390185674        3            2

          6       7         3901856742       8            7

          7       3          9018567423      10           9

合起来即:0605279  ,最后一个数字不变还是  ,头两个数字不变,因此最后结果为转换到的卡面号码: 2006052797

 

转换算法因为答应客户不要公布,所以请网友自己写出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值