0

我正在使用一些 EMV 标签,其中大多数标签的长度为12个字节,例如 9F02, 81,..我知道有一定的位配置可以知道如何确定标签长度以确定标签是否为 2 字节长度或更大, 我在用着:

unsigned char tags[]={0x9F,0x02};
if((tags[0]&0x1F)==0x1F){
  ...
}

但是当我有一些比这更大的标签时,我不知道该怎么做。

我正在使用 EMV 数据,我正在使用认证卡进行测试,我收到these tags are: DF8111, DF8119, DF811E, DF812C它们与 CVM 相关。

4

2 回答 2

4

浏览EMV 4.3 第 3 册,附件 B - BER-TLV 数据对象规则 B1、B2、B3 部分。如果您准确地遵循这一点,那么您就不需要存储静态标签列表;它清楚地说明了如何编码和解释标签长度和值。

于 2020-03-22T12:10:46.737 回答
0

根据

EMV 4.3 书 3

, 附件 B -上面链接的BER-TLV 数据对象部分 B1B2的规则,您应该检查当前字节中的第 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-22T18:01:43.830 回答