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