关于G-011规范中CHOICE类型ENUMERATED选项的值表示疑问
关于G-011规范中CB支付的ASN.1值表示疑问解答
嘿,我来帮你理清这个ASN.1值表示的问题~首先先把你提到的G-011 ASN.1规范贴出来,方便我们对照分析:
DEFINITIONS AUTOMATIC TAGS ::= BEGIN Payment-method ::= CHOICE { check NumericString(SIZE (15)), credit-card Credit-card, cash NULL } Credit-card ::= SEQUENCE { type Card-type, number NumericString(SIZE (20)), expiry-date NumericString(SIZE (6))-- MMYYYY -- } Card-type ::= ENUMERATED { cb(0), visa(1), eurocard(2), diners(3), american-express(4) } END
你之前认为的value Payment-method ::= credit-card : cb是不正确的,核心原因是:credit-card对应的是一个SEQUENCE类型(Credit-card),而不是直接对应枚举值cb。cb只是Credit-card序列里type字段的枚举选项,所以你需要完整构造这个SEQUENCE实例,再把它作为Payment-method CHOICE的credit-card选项的值。
举个实际的例子:假设我们有一张CB卡,卡号是12345678901234567890,过期日期是122028(格式为MMYYYY,代表2028年12月),那么符合规范的Payment-method值表示应该是这样的:
value Payment-method ::= credit-card : { type cb, number "12345678901234567890", expiry-date "122028" }
需要注意的是,因为Credit-card是SEQUENCE类型,且所有字段都没有标记为OPTIONAL,所以必须提供type、number、expiry-date三个字段的有效值,每个字段还要符合定义里的SIZE要求(比如number必须是20位的NumericString)。
内容的提问来源于stack exchange,提问作者YaFred
相关产品推荐
相关产品推荐

