1 #include <ccan/array_size/array_size.h>
2 #include <ccan/mem/mem.h>
3 #include <common/iso4217.h>
4
5 /* Wikipedia leads me to: https://www.currency-iso.org/en/home/tables/table-a1.html
6
7 "List one: Currency, fund and precious metal codes",,,,,
8 Published:,,,,,
9 "August 29, 2018", ,,,,
10 ENTITY,Currency,Alphabetic Code,Numeric Code,Minor unit,Fund
11 */
12 static const struct iso4217_name_and_divisor iso4217[] = {
13 { "AED", 2 },
14 { "AFN", 2 },
15 { "ALL", 2 },
16 { "AMD", 2 },
17 { "ANG", 2 },
18 { "AOA", 2 },
19 { "ARS", 2 },
20 { "AUD", 2 },
21 { "AWG", 2 },
22 { "AZN", 2 },
23 { "BAM", 2 },
24 { "BBD", 2 },
25 { "BDT", 2 },
26 { "BGN", 2 },
27 { "BHD", 3 },
28 { "BIF", 0 },
29 { "BMD", 2 },
30 { "BND", 2 },
31 { "BOB", 2 },
32 { "BOV", 2 },
33 { "BRL", 2 },
34 { "BSD", 2 },
35 { "BTN", 2 },
36 { "BWP", 2 },
37 { "BYN", 2 },
38 { "BZD", 2 },
39 { "CAD", 2 },
40 { "CDF", 2 },
41 { "CHE", 2 },
42 { "CHF", 2 },
43 { "CHW", 2 },
44 { "CLF", 4 },
45 { "CLP", 0 },
46 { "CNY", 2 },
47 { "COP", 2 },
48 { "COU", 2 },
49 { "CRC", 2 },
50 { "CUC", 2 },
51 { "CUP", 2 },
52 { "CVE", 2 },
53 { "CZK", 2 },
54 { "DJF", 0 },
55 { "DKK", 2 },
56 { "DOP", 2 },
57 { "DZD", 2 },
58 { "EGP", 2 },
59 { "ERN", 2 },
60 { "ETB", 2 },
61 { "EUR", 2 },
62 { "FJD", 2 },
63 { "FKP", 2 },
64 { "GBP", 2 },
65 { "GEL", 2 },
66 { "GHS", 2 },
67 { "GIP", 2 },
68 { "GMD", 2 },
69 { "GNF", 0 },
70 { "GTQ", 2 },
71 { "GYD", 2 },
72 { "HKD", 2 },
73 { "HNL", 2 },
74 { "HRK", 2 },
75 { "HTG", 2 },
76 { "HUF", 2 },
77 { "IDR", 2 },
78 { "ILS", 2 },
79 { "INR", 2 },
80 { "IQD", 3 },
81 { "IRR", 2 },
82 { "ISK", 0 },
83 { "JMD", 2 },
84 { "JOD", 3 },
85 { "JPY", 0 },
86 { "KES", 2 },
87 { "KGS", 2 },
88 { "KHR", 2 },
89 { "KMF", 0 },
90 { "KPW", 2 },
91 { "KRW", 0 },
92 { "KWD", 3 },
93 { "KYD", 2 },
94 { "KZT", 2 },
95 { "LAK", 2 },
96 { "LBP", 2 },
97 { "LKR", 2 },
98 { "LRD", 2 },
99 { "LSL", 2 },
100 { "LYD", 3 },
101 { "MAD", 2 },
102 { "MDL", 2 },
103 { "MGA", 2 },
104 { "MKD", 2 },
105 { "MMK", 2 },
106 { "MNT", 2 },
107 { "MOP", 2 },
108 { "MRU", 2 },
109 { "MUR", 2 },
110 { "MVR", 2 },
111 { "MWK", 2 },
112 { "MXN", 2 },
113 { "MXV", 2 },
114 { "MYR", 2 },
115 { "MZN", 2 },
116 { "NAD", 2 },
117 { "NGN", 2 },
118 { "NIO", 2 },
119 { "NOK", 2 },
120 { "NPR", 2 },
121 { "NZD", 2 },
122 { "OMR", 3 },
123 { "PAB", 2 },
124 { "PEN", 2 },
125 { "PGK", 2 },
126 { "PHP", 2 },
127 { "PKR", 2 },
128 { "PLN", 2 },
129 { "PYG", 0 },
130 { "QAR", 2 },
131 { "RON", 2 },
132 { "RSD", 2 },
133 { "RUB", 2 },
134 { "RWF", 0 },
135 { "SAR", 2 },
136 { "SBD", 2 },
137 { "SCR", 2 },
138 { "SDG", 2 },
139 { "SEK", 2 },
140 { "SGD", 2 },
141 { "SHP", 2 },
142 { "SLL", 2 },
143 { "SOS", 2 },
144 { "SRD", 2 },
145 { "SSP", 2 },
146 { "STN", 2 },
147 { "SVC", 2 },
148 { "SYP", 2 },
149 { "SZL", 2 },
150 { "THB", 2 },
151 { "TJS", 2 },
152 { "TMT", 2 },
153 { "TND", 3 },
154 { "TOP", 2 },
155 { "TRY", 2 },
156 { "TTD", 2 },
157 { "TWD", 2 },
158 { "TZS", 2 },
159 { "UAH", 2 },
160 { "UGX", 0 },
161 { "USD", 2 },
162 { "USN", 2 },
163 { "UYI", 0 },
164 { "UYU", 2 },
165 { "UYW", 4 },
166 { "UZS", 2 },
167 { "VES", 2 },
168 { "VND", 0 },
169 { "VUV", 0 },
170 { "WST", 2 },
171 { "XAF", 0 },
172 { "XAG", 0 },
173 { "XAU", 0 },
174 { "XBA", 0 },
175 { "XBB", 0 },
176 { "XBC", 0 },
177 { "XBD", 0 },
178 { "XCD", 2 },
179 { "XDR", 0 },
180 { "XOF", 0 },
181 { "XPD", 0 },
182 { "XPF", 0 },
183 { "XPT", 0 },
184 { "XSU", 0 },
185 { "XTS", 0 },
186 { "XUA", 0 },
187 { "XXX", 0 },
188 { "YER", 2 },
189 { "ZAR", 2 },
190 { "ZMW", 2 },
191 { "ZWL", 2 },
192 };
193
find_iso4217(const utf8 * prefix,size_t len)194 const struct iso4217_name_and_divisor *find_iso4217(const utf8 *prefix,
195 size_t len)
196 {
197 for (size_t i = 0; i < ARRAY_SIZE(iso4217); i++) {
198 if (memeq(iso4217[i].name, strlen(iso4217[i].name),
199 prefix, len))
200 return &iso4217[i];
201 }
202 return NULL;
203 }
204