diff --git a/bin/update-currency-codes b/bin/update-currency-codes new file mode 100755 index 000000000..e6879bef3 --- /dev/null +++ b/bin/update-currency-codes @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# Usage: {script} TLD_FILENAME +# Update list of TLD + +set -euo pipefail + +declare -r IFS=$'\n' +declare -r URL="https://www.currency-iso.org/dam/downloads/lists/list_one.xml" +declare -r RULE="${1}" +declare -r TEMPORARY_XML=$(mktemp) + +download_list() +{ + echo "Downloading list from '${URL}'" + curl --silent --location "${1}" --output "${2}" +} + +update_currency_codes() +{ + local -r filename_rule="${1}" + local -r filename_xml="${2}" + local -r number_of_items=$(grep "" "${filename_xml}" | wc --lines) + local -r temporary_rule=$(mktemp) + + echo "Updating list in '${filename_rule}'" + { + sed -n '/^ "${temporary_rule}" + + mv "${temporary_rule}" "${filename_rule}" +} + +download_list "${URL}" "${TEMPORARY_XML}" +update_currency_codes "${RULE}" "${TEMPORARY_XML}" diff --git a/library/Rules/CurrencyCode.php b/library/Rules/CurrencyCode.php index 024daef88..8fa73e5b0 100644 --- a/library/Rules/CurrencyCode.php +++ b/library/Rules/CurrencyCode.php @@ -22,184 +22,285 @@ class CurrencyCode extends AbstractRule * @var array */ private $currencyCodes = [ - 'AED', // UAE Dirham 'AFN', // Afghani + 'EUR', // Euro 'ALL', // Lek - 'AMD', // Armenian Dram - 'ANG', // Netherlands Antillean Guilder + 'DZD', // Algerian Dinar + 'USD', // US Dollar + 'EUR', // Euro 'AOA', // Kwanza + 'XCD', // East Caribbean Dollar + '', // No universal currency + 'XCD', // East Caribbean Dollar 'ARS', // Argentine Peso - 'AUD', // Australian Dollar + 'AMD', // Armenian Dram 'AWG', // Aruban Florin - 'AZN', // Azerbaijanian Manat - 'BAM', // Convertible Mark - 'BBD', // Barbados Dollar - 'BDT', // Taka - 'BGN', // Bulgarian Lev + 'AUD', // Australian Dollar + 'EUR', // Euro + 'AZN', // Azerbaijan Manat + 'BSD', // Bahamian Dollar 'BHD', // Bahraini Dinar - 'BIF', // Burundi Franc + 'BDT', // Taka + 'BBD', // Barbados Dollar + 'BYN', // Belarusian Ruble + 'EUR', // Euro + 'BZD', // Belize Dollar + 'XOF', // CFA Franc BCEAO 'BMD', // Bermudian Dollar - 'BND', // Brunei Dollar + 'INR', // Indian Rupee + 'BTN', // Ngultrum 'BOB', // Boliviano 'BOV', // Mvdol - 'BRL', // Brazilian Real - 'BSD', // Bahamian Dollar - 'BTN', // Ngultrum + 'USD', // US Dollar + 'BAM', // Convertible Mark 'BWP', // Pula - 'BYN', // Belarussian Ruble - 'BZD', // Belize Dollar + 'NOK', // Norwegian Krone + 'BRL', // Brazilian Real + 'USD', // US Dollar + 'BND', // Brunei Dollar + 'BGN', // Bulgarian Lev + 'XOF', // CFA Franc BCEAO + 'BIF', // Burundi Franc + 'CVE', // Cabo Verde Escudo + 'KHR', // Riel + 'XAF', // CFA Franc BEAC 'CAD', // Canadian Dollar - 'CDF', // Congolese Franc - 'CHE', // WIR Euro - 'CHF', // Swiss Franc - 'CHW', // WIR Franc - 'CLF', // Unidad de Fomento + 'KYD', // Cayman Islands Dollar + 'XAF', // CFA Franc BEAC + 'XAF', // CFA Franc BEAC 'CLP', // Chilean Peso + 'CLF', // Unidad de Fomento 'CNY', // Yuan Renminbi + 'AUD', // Australian Dollar + 'AUD', // Australian Dollar 'COP', // Colombian Peso 'COU', // Unidad de Valor Real + 'KMF', // Comorian Franc + 'CDF', // Congolese Franc + 'XAF', // CFA Franc BEAC + 'NZD', // New Zealand Dollar 'CRC', // Costa Rican Colon - 'CUC', // Peso Convertible + 'XOF', // CFA Franc BCEAO + 'HRK', // Kuna 'CUP', // Cuban Peso - 'CVE', // Cabo Verde Escudo + 'CUC', // Peso Convertible + 'ANG', // Netherlands Antillean Guilder + 'EUR', // Euro 'CZK', // Czech Koruna - 'DJF', // Djibouti Franc 'DKK', // Danish Krone + 'DJF', // Djibouti Franc + 'XCD', // East Caribbean Dollar 'DOP', // Dominican Peso - 'DZD', // Algerian Dinar + 'USD', // US Dollar 'EGP', // Egyptian Pound + 'SVC', // El Salvador Colon + 'USD', // US Dollar + 'XAF', // CFA Franc BEAC 'ERN', // Nakfa + 'EUR', // Euro 'ETB', // Ethiopian Birr 'EUR', // Euro - 'FJD', // Fiji Dollar 'FKP', // Falkland Islands Pound - 'GBP', // Pound Sterling + 'DKK', // Danish Krone + 'FJD', // Fiji Dollar + 'EUR', // Euro + 'EUR', // Euro + 'EUR', // Euro + 'XPF', // CFP Franc + 'EUR', // Euro + 'XAF', // CFA Franc BEAC + 'GMD', // Dalasi 'GEL', // Lari + 'EUR', // Euro 'GHS', // Ghana Cedi 'GIP', // Gibraltar Pound - 'GMD', // Dalasi - 'GNF', // Guinea Franc + 'EUR', // Euro + 'DKK', // Danish Krone + 'XCD', // East Caribbean Dollar + 'EUR', // Euro + 'USD', // US Dollar 'GTQ', // Quetzal + 'GBP', // Pound Sterling + 'GNF', // Guinean Franc + 'XOF', // CFA Franc BCEAO 'GYD', // Guyana Dollar - 'HKD', // Hong Kong Dollar - 'HNL', // Lempira - 'HRK', // Kuna 'HTG', // Gourde + 'USD', // US Dollar + 'AUD', // Australian Dollar + 'EUR', // Euro + 'HNL', // Lempira + 'HKD', // Hong Kong Dollar 'HUF', // Forint - 'IDR', // Rupiah - 'ILS', // New Israeli Sheqel + 'ISK', // Iceland Krona 'INR', // Indian Rupee - 'IQD', // Iraqi Dinar + 'IDR', // Rupiah + 'XDR', // SDR (Special Drawing Right) 'IRR', // Iranian Rial - 'ISK', // Iceland Krona + 'IQD', // Iraqi Dinar + 'EUR', // Euro + 'GBP', // Pound Sterling + 'ILS', // New Israeli Sheqel + 'EUR', // Euro 'JMD', // Jamaican Dollar - 'JOD', // Jordanian Dinar 'JPY', // Yen + 'GBP', // Pound Sterling + 'JOD', // Jordanian Dinar + 'KZT', // Tenge 'KES', // Kenyan Shilling - 'KGS', // Som - 'KHR', // Riel - 'KMF', // Comoro Franc + 'AUD', // Australian Dollar 'KPW', // North Korean Won 'KRW', // Won 'KWD', // Kuwaiti Dinar - 'KYD', // Cayman Islands Dollar - 'KZT', // Tenge - 'LAK', // Kip + 'KGS', // Som + 'LAK', // Lao Kip + 'EUR', // Euro 'LBP', // Lebanese Pound - 'LKR', // Sri Lanka Rupee - 'LRD', // Liberian Dollar 'LSL', // Loti + 'ZAR', // Rand + 'LRD', // Liberian Dollar 'LYD', // Libyan Dinar - 'MAD', // Moroccan Dirham - 'MDL', // Moldovan Leu - 'MGA', // Malagasy Ariary - 'MKD', // Denar - 'MMK', // Kyat - 'MNT', // Tugrik + 'CHF', // Swiss Franc + 'EUR', // Euro + 'EUR', // Euro 'MOP', // Pataca - 'MRO', // Ouguiya - 'MUR', // Mauritius Rupee + 'MKD', // Denar + 'MGA', // Malagasy Ariary + 'MWK', // Malawi Kwacha + 'MYR', // Malaysian Ringgit 'MVR', // Rufiyaa - 'MWK', // Kwacha + 'XOF', // CFA Franc BCEAO + 'EUR', // Euro + 'USD', // US Dollar + 'EUR', // Euro + 'MRU', // Ouguiya + 'MUR', // Mauritius Rupee + 'EUR', // Euro + 'XUA', // ADB Unit of Account 'MXN', // Mexican Peso 'MXV', // Mexican Unidad de Inversion (UDI) - 'MYR', // Malaysian Ringgit + 'USD', // US Dollar + 'MDL', // Moldovan Leu + 'EUR', // Euro + 'MNT', // Tugrik + 'EUR', // Euro + 'XCD', // East Caribbean Dollar + 'MAD', // Moroccan Dirham 'MZN', // Mozambique Metical + 'MMK', // Kyat 'NAD', // Namibia Dollar - 'NGN', // Naira - 'NIO', // Cordoba Oro - 'NOK', // Norwegian Krone + 'ZAR', // Rand + 'AUD', // Australian Dollar 'NPR', // Nepalese Rupee + 'EUR', // Euro + 'XPF', // CFP Franc + 'NZD', // New Zealand Dollar + 'NIO', // Cordoba Oro + 'XOF', // CFA Franc BCEAO + 'NGN', // Naira 'NZD', // New Zealand Dollar + 'AUD', // Australian Dollar + 'USD', // US Dollar + 'NOK', // Norwegian Krone 'OMR', // Rial Omani + 'PKR', // Pakistan Rupee + 'USD', // US Dollar + '', // No universal currency 'PAB', // Balboa - 'PEN', // Nuevo Sol + 'USD', // US Dollar 'PGK', // Kina + 'PYG', // Guarani + 'PEN', // Sol 'PHP', // Philippine Peso - 'PKR', // Pakistan Rupee + 'NZD', // New Zealand Dollar 'PLN', // Zloty - 'PYG', // Guarani + 'EUR', // Euro + 'USD', // US Dollar 'QAR', // Qatari Rial + 'EUR', // Euro 'RON', // Romanian Leu - 'RSD', // Serbian Dinar 'RUB', // Russian Ruble 'RWF', // Rwanda Franc + 'EUR', // Euro + 'SHP', // Saint Helena Pound + 'XCD', // East Caribbean Dollar + 'XCD', // East Caribbean Dollar + 'EUR', // Euro + 'EUR', // Euro + 'XCD', // East Caribbean Dollar + 'WST', // Tala + 'EUR', // Euro + 'STN', // Dobra 'SAR', // Saudi Riyal - 'SBD', // Solomon Islands Dollar + 'XOF', // CFA Franc BCEAO + 'RSD', // Serbian Dinar 'SCR', // Seychelles Rupee - 'SDG', // Sudanese Pound - 'SEK', // Swedish Krona - 'SGD', // Singapore Dollar - 'SHP', // Saint Helena Pound 'SLL', // Leone + 'SGD', // Singapore Dollar + 'ANG', // Netherlands Antillean Guilder + 'XSU', // Sucre + 'EUR', // Euro + 'EUR', // Euro + 'SBD', // Solomon Islands Dollar 'SOS', // Somali Shilling - 'SRD', // Surinam Dollar + 'ZAR', // Rand + '', // No universal currency 'SSP', // South Sudanese Pound - 'STD', // Dobra - 'SVC', // El Salvador Colon - 'SYP', // Syrian Pound + 'EUR', // Euro + 'LKR', // Sri Lanka Rupee + 'SDG', // Sudanese Pound + 'SRD', // Surinam Dollar + 'NOK', // Norwegian Krone 'SZL', // Lilangeni - 'THB', // Baht + 'SEK', // Swedish Krona + 'CHF', // Swiss Franc + 'CHE', // WIR Euro + 'CHW', // WIR Franc + 'SYP', // Syrian Pound + 'TWD', // New Taiwan Dollar 'TJS', // Somoni - 'TMT', // Turkmenistan New Manat - 'TND', // Tunisian Dinar + 'TZS', // Tanzanian Shilling + 'THB', // Baht + 'USD', // US Dollar + 'XOF', // CFA Franc BCEAO + 'NZD', // New Zealand Dollar 'TOP', // Pa’anga - 'TRY', // Turkish Lira 'TTD', // Trinidad and Tobago Dollar - 'TWD', // New Taiwan Dollar - 'TZS', // Tanzanian Shilling - 'UAH', // Hryvnia + 'TND', // Tunisian Dinar + 'TRY', // Turkish Lira + 'TMT', // Turkmenistan New Manat + 'USD', // US Dollar + 'AUD', // Australian Dollar 'UGX', // Uganda Shilling + 'UAH', // Hryvnia + 'AED', // UAE Dirham + 'GBP', // Pound Sterling + 'USD', // US Dollar 'USD', // US Dollar 'USN', // US Dollar (Next day) - 'UYI', // Uruguay Peso en Unidades Indexadas (URUIURUI) 'UYU', // Peso Uruguayo + 'UYI', // Uruguay Peso en Unidades Indexadas (UI) + 'UYW', // Unidad Previsional 'UZS', // Uzbekistan Sum - 'VEF', // Bolivar - 'VND', // Dong 'VUV', // Vatu - 'WST', // Tala - 'XAF', // CFA Franc BEAC - 'XAG', // Silver - 'XAU', // Gold + 'VES', // Bolívar Soberano + 'VND', // Dong + 'USD', // US Dollar + 'USD', // US Dollar + 'XPF', // CFP Franc + 'MAD', // Moroccan Dirham + 'YER', // Yemeni Rial + 'ZMW', // Zambian Kwacha + 'ZWL', // Zimbabwe Dollar 'XBA', // Bond Markets Unit European Composite Unit (EURCO) 'XBB', // Bond Markets Unit European Monetary Unit (E.M.U.-6) 'XBC', // Bond Markets Unit European Unit of Account 9 (E.U.A.-9) 'XBD', // Bond Markets Unit European Unit of Account 17 (E.U.A.-17) - 'XCD', // East Caribbean Dollar - 'XDR', // SDR (Special Drawing Right) - 'XOF', // CFA Franc BCEAO - 'XPD', // Palladium - 'XPF', // CFP Franc - 'XPT', // Platinum - 'XSU', // Sucre 'XTS', // Codes specifically reserved for testing purposes - 'XUA', // ADB Unit of Account 'XXX', // The codes assigned for transactions where no currency is involved - 'YER', // Yemeni Rial - 'ZAR', // Rand - 'ZMW', // Zambian Kwacha - 'ZWL', // Zimbabwe Dollar + 'XAU', // Gold + 'XPD', // Palladium + 'XPT', // Platinum + 'XAG', // Silver ]; public function validate($input)