764 而不是 THB,写 840 而不是 USD。下表按数字码排序收录 150 个币种,每行给出数字码、字母码、名称和小数位 — 最后这一列决定金额域里隐含的小数点在哪,和代码本身一样重要。
表按数字码排序,因为报文里拿到的就是数字:DE49 里是 764,你要查的是 764 是什么(泰铢,2 位小数)。每一行都可以用 #c + 数字码直接定位,比如 #c764。一个好记的规律:数字码沿用 ISO 3166 国家数字代码(840 = 美国、392 = 日本),超国家货币则集中在 9xx 段(978 欧元、952 西非法郎)。
快速跳转:764 THB · 840 USD · 978 EUR · 392 JPY · 156 CNY · 826 GBP · 702 SGD · 414 KWD
| 数字码(DE49) | 字母码 | 货币 | 小数位 |
|---|---|---|---|
008 | ALL | 阿尔巴尼亚列克 | 2 |
012 | DZD | 阿尔及利亚第纳尔 | 2 |
032 | ARS | 阿根廷比索 | 2 |
036 | AUD | 澳元 | 2 |
044 | BSD | 巴哈马元 | 2 |
048 | BHD | 巴林第纳尔 | 3 |
050 | BDT | 孟加拉塔卡 | 2 |
051 | AMD | 亚美尼亚德拉姆 | 2 |
052 | BBD | 巴巴多斯元 | 2 |
060 | BMD | 百慕大元 | 2 |
064 | BTN | 不丹努尔特鲁姆 | 2 |
068 | BOB | 玻利维亚诺 | 2 |
072 | BWP | 博茨瓦纳普拉 | 2 |
084 | BZD | 伯利兹元 | 2 |
090 | SBD | 所罗门群岛元 | 2 |
096 | BND | 文莱元 | 2 |
104 | MMK | 缅甸元 | 2 |
108 | BIF | 布隆迪法郎 | 0 |
116 | KHR | 柬埔寨瑞尔 | 2 |
124 | CAD | 加元 | 2 |
132 | CVE | 佛得角埃斯库多 | 2 |
136 | KYD | 开曼群岛元 | 2 |
144 | LKR | 斯里兰卡卢比 | 2 |
152 | CLP | 智利比索 | 0 |
156 | CNY | 人民币 | 2 |
170 | COP | 哥伦比亚比索 | 2 |
174 | KMF | 科摩罗法郎 | 0 |
188 | CRC | 哥斯达黎加科朗 | 2 |
192 | CUP | 古巴比索 | 2 |
203 | CZK | 捷克克朗 | 2 |
208 | DKK | 丹麦克朗 | 2 |
214 | DOP | 多米尼加比索 | 2 |
230 | ETB | 埃塞俄比亚比尔 | 2 |
238 | FKP | 福克兰群岛镑 | 2 |
242 | FJD | 斐济元 | 2 |
262 | DJF | 吉布提法郎 | 0 |
270 | GMD | 冈比亚达拉西 | 2 |
292 | GIP | 直布罗陀镑 | 2 |
320 | GTQ | 危地马拉格查尔 | 2 |
324 | GNF | 几内亚法郎 | 0 |
328 | GYD | 圭亚那元 | 2 |
332 | HTG | 海地古德 | 2 |
340 | HNL | 洪都拉斯伦皮拉 | 2 |
344 | HKD | 港元 | 2 |
348 | HUF | 匈牙利福林 | 2 |
352 | ISK | 冰岛克朗 | 0 |
356 | INR | 印度卢比 | 2 |
360 | IDR | 印尼盾 | 2 |
364 | IRR | 伊朗里亚尔 | 2 |
368 | IQD | 伊拉克第纳尔 | 3 |
376 | ILS | 以色列新谢克尔 | 2 |
388 | JMD | 牙买加元 | 2 |
392 | JPY | 日元 | 0 |
398 | KZT | 哈萨克坚戈 | 2 |
400 | JOD | 约旦第纳尔 | 3 |
404 | KES | 肯尼亚先令 | 2 |
408 | KPW | 朝鲜元 | 2 |
410 | KRW | 韩元 | 0 |
414 | KWD | 科威特第纳尔 | 3 |
417 | KGS | 吉尔吉斯斯坦索姆 | 2 |
418 | LAK | 老挝基普 | 2 |
422 | LBP | 黎巴嫩镑 | 2 |
426 | LSL | 莱索托洛蒂 | 2 |
430 | LRD | 利比里亚元 | 2 |
434 | LYD | 利比亚第纳尔 | 3 |
446 | MOP | 澳门元 | 2 |
454 | MWK | 马拉维克瓦查 | 2 |
458 | MYR | 马来西亚林吉特 | 2 |
462 | MVR | 马尔代夫拉菲亚 | 2 |
480 | MUR | 毛里求斯卢比 | 2 |
484 | MXN | 墨西哥比索 | 2 |
496 | MNT | 蒙古图格里克 | 2 |
498 | MDL | 摩尔多瓦列伊 | 2 |
504 | MAD | 摩洛哥迪拉姆 | 2 |
512 | OMR | 阿曼里亚尔 | 3 |
516 | NAD | 纳米比亚元 | 2 |
524 | NPR | 尼泊尔卢比 | 2 |
533 | AWG | 阿鲁巴弗罗林 | 2 |
548 | VUV | 瓦努阿图瓦图 | 0 |
554 | NZD | 新西兰元 | 2 |
558 | NIO | 尼加拉瓜科多巴 | 2 |
566 | NGN | 尼日利亚奈拉 | 2 |
578 | NOK | 挪威克朗 | 2 |
586 | PKR | 巴基斯坦卢比 | 2 |
590 | PAB | 巴拿马巴波亚 | 2 |
598 | PGK | 巴布亚新几内亚基那 | 2 |
600 | PYG | 巴拉圭瓜拉尼 | 0 |
604 | PEN | 秘鲁索尔 | 2 |
608 | PHP | 菲律宾比索 | 2 |
634 | QAR | 卡塔尔里亚尔 | 2 |
643 | RUB | 俄罗斯卢布 | 2 |
646 | RWF | 卢旺达法郎 | 0 |
654 | SHP | 圣赫勒拿镑 | 2 |
682 | SAR | 沙特里亚尔 | 2 |
690 | SCR | 塞舌尔卢比 | 2 |
702 | SGD | 新加坡元 | 2 |
704 | VND | 越南盾 | 0 |
706 | SOS | 索马里先令 | 2 |
710 | ZAR | 南非兰特 | 2 |
748 | SZL | 斯威士兰里兰吉尼 | 2 |
752 | SEK | 瑞典克朗 | 2 |
756 | CHF | 瑞士法郎 | 2 |
760 | SYP | 叙利亚镑 | 2 |
764 | THB | 泰铢 | 2 |
776 | TOP | 汤加潘加 | 2 |
780 | TTD | 特立尼达和多巴哥元 | 2 |
784 | AED | 阿联酋迪拉姆 | 2 |
788 | TND | 突尼斯第纳尔 | 3 |
800 | UGX | 乌干达先令 | 0 |
807 | MKD | 北马其顿代纳尔 | 2 |
818 | EGP | 埃及镑 | 2 |
826 | GBP | 英镑 | 2 |
834 | TZS | 坦桑尼亚先令 | 2 |
840 | USD | 美元 | 2 |
858 | UYU | 乌拉圭比索 | 2 |
860 | UZS | 乌兹别克斯坦苏姆 | 2 |
882 | WST | 萨摩亚塔拉 | 2 |
886 | YER | 也门里亚尔 | 2 |
901 | TWD | 新台币 | 2 |
925 | SLE | 塞拉利昂利昂 | 2 |
928 | VES | 委内瑞拉玻利瓦尔 | 2 |
929 | MRU | 毛里塔尼亚乌吉亚 | 2 |
930 | STN | 圣多美和普林西比多布拉 | 2 |
933 | BYN | 白俄罗斯卢布 | 2 |
934 | TMT | 土库曼斯坦马纳特 | 2 |
936 | GHS | 加纳塞地 | 2 |
938 | SDG | 苏丹镑 | 2 |
941 | RSD | 塞尔维亚第纳尔 | 2 |
943 | MZN | 莫桑比克梅蒂卡尔 | 2 |
944 | AZN | 阿塞拜疆马纳特 | 2 |
946 | RON | 罗马尼亚列伊 | 2 |
949 | TRY | 土耳其里拉 | 2 |
950 | XAF | 中非法郎 | 0 |
951 | XCD | 东加勒比元 | 2 |
952 | XOF | 西非法郎 | 0 |
953 | XPF | 太平洋法郎 | 0 |
967 | ZMW | 赞比亚克瓦查 | 2 |
968 | SRD | 苏里南元 | 2 |
969 | MGA | 马达加斯加阿里亚里 | 2 |
971 | AFN | 阿富汗尼 | 2 |
972 | TJS | 塔吉克斯坦索莫尼 | 2 |
973 | AOA | 安哥拉宽扎 | 2 |
975 | BGN | 保加利亚列弗 | 2 |
976 | CDF | 刚果法郎 | 2 |
977 | BAM | 波黑可兑换马克 | 2 |
978 | EUR | 欧元 | 2 |
980 | UAH | 乌克兰格里夫纳 | 2 |
981 | GEL | 格鲁吉亚拉里 | 2 |
985 | PLN | 波兰兹罗提 | 2 |
986 | BRL | 巴西雷亚尔 | 2 |
要交互检索、顺便换算金额,用货币码与小数位查询工具 — 输代码、数字或名称即时过滤。
ISO 8583 的金额域没有小数点。DE4 是以最小货币单位计的整数,末尾几位算小数,完全由 DE49 里那个货币的小数位说了算。同一个 12 位值,在不同货币下是三个差别巨大的金额:
| DE4 取值 | DE49 | 小数位 | 实际金额 |
|---|---|---|---|
000000001000 | 840 USD | 2 | 10.00 美元 |
000000001000 | 392 JPY | 0 | 1,000 日元 |
000000001000 | 414 KWD | 3 | 1.000 科威特第纳尔 |
金额 × 100 写死 — 因为先测的十来个币种恰好都是 2 位小数。这样发一笔 ¥5,000,报文里就是 500000,而日元 0 位小数,这是 ¥500,000,多了一百倍,而且授权照样能过。反过来,把 3 位小数的第纳尔按 100 除,就少收十倍。两种错都是静默的:不报错、不拦截,只在几天后对账时炸出来。所有换算都应该查「货币 → 小数位」表驱动,金额旁边永远不要出现字面量 100。金额域整个就是最终金额,没有小数部分:
BIF 108(布隆迪法郎)、CLP 152(智利比索)、KMF 174(科摩罗法郎)、DJF 262(吉布提法郎)、GNF 324(几内亚法郎)、ISK 352(冰岛克朗)、JPY 392(日元)、KRW 410(韩元)、VUV 548(瓦努阿图瓦图)、PYG 600(巴拉圭瓜拉尼)、RWF 646(卢旺达法郎)、VND 704(越南盾)、UGX 800(乌干达先令)、XAF 950(中非法郎)、XOF 952(西非法郎)、XPF 953(太平洋法郎)。
末尾三位是小数(1 第纳尔 = 1000 菲尔):
BHD 048(巴林第纳尔)、IQD 368(伊拉克第纳尔)、JOD 400(约旦第纳尔)、KWD 414(科威特第纳尔)、LYD 434(利比亚第纳尔)、OMR 512(阿曼里亚尔)、TND 788(突尼斯第纳尔)。
上表其余币种都是常见的 2 位小数。
ISO 8583 定义了三个货币码域,各自配一个金额域:
| 货币域 | 名称 | 配对金额域 | 是谁的货币 |
|---|---|---|---|
DE49 | 交易货币码 | DE4(交易金额) | 商户收银台上实际刷的货币 |
DE50 | 清算货币码 | DE5(清算金额) | 网络在银行之间清算用的货币 |
DE51 | 持卡人记账货币码 | DE6(持卡人记账金额) | 持卡人账户被扣的货币 |
纯境内交易三者相同,DE50/DE51 往往不出现。跨境时三者分道扬镳:新加坡发的卡在曼谷消费,可能是 DE49 = 764(收银台收泰铢)、DE50 = 840(网络按美元清算)、DE51 = 702(持卡人按新元入账)。如果商户提供 DCC(动态货币转换)且持卡人接受,换汇就前移到收银台:DE49 直接变成 702 — 卡的货币,用商户侧汇率。EMV 金额标签 9F02 跟随交易货币,即按 DE49 的小数位读。
实操原则:永远不要假设三者一致。每个金额都用它自己配对的货币域的小数位来读 — DE4 配 DE49、DE5 配 DE50、DE6 配 DE51。把整条报文贴进解析器,它会自动给每个金额套上对应小数位。
ISO 4217 是持续维护的标准,不是一张定死的表。货币会改版换码(塞拉利昂 SLL 改版为 SLE 925)、会随换币退役(克罗地亚 HRK 随加入欧元区停用),也会新增。特殊代码 XXX 999 表示「无货币」,测试报文里常见。本表收录的是成文时仍在流通的币种;真正过钱的场景,以你对端的接口规范和当期 ISO 4217 修订为准 — 规范和本表说法不一致时,听规范的。
👉 手上有真实报文?解析器会解出 DE49/DE50/DE51,并按正确小数位格式化每个金额。单个代码想顺手换算金额,用货币码查询工具。