我正在使用一些EMV标记,其中大多数具有1或2字节的长度--例如9F02, 81,.. --我知道有一个特定的位配置来知道如何确定标记长度,以确定标签是否为2字节或更长,我使用的是:
unsigned char tags[]={0x9F,0x02};
if((tags[0]&0x1F)==0x1F){
...
}但是当我有一些比这个更大的标签时,我不知道该怎么做。
我正在处理EMV数据,使用认证卡进行测试,我正在接收these tags are: DF8111, DF8119, DF811E, DF812C --它们与CVM有关。
发布于 2020-03-22 18:01:43
根据
EMV 4.3第3卷
附件B-BER Data Objects节B1,B2,它们是在上面链接的,您应该检查当前字节中的位8,以便知道标记中是否有更多的字节,假设您使用的是c/c++ (在本文中标记它时),这里有一个代码可以用来检查该条件,我注释了下面的代码,在这里条件是可以使用的。
int start = 0;
int end = start + len;
while (start < end) {
int tag = src[start++] & 0xFF;
if (tag == 0x00 || tag == 0xFF) {
continue;
}
if ((tag & 0x1F) == 0x1F) {
if (start >= len ) {
break;
}
tag = (tag << 8) | src[start++] & 0xFF;
// tag has 3 bytes (0xFFFFFF)
/// check this line it could what you need.
if ((tag & 0x80) != 0) {
if (start >= len ) {
break;
}
//// Append third byte to the Tag.
tag = (tag << 8) | src[start++] & 0xFF;
}
}
/// ...
} ///end while希望这能帮到你。
发布于 2020-03-22 12:10:46
通过EMV 4.3第3卷,附件B-BER数据对象规则( B1,B2,B3 ).如果您精确地遵循这一点,那么您就不需要存储一个静态的标签列表;它清楚地说明了如何编码和解释标记长度和值。
https://stackoverflow.com/questions/60792080
复制相似问题