You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:05:24