ISINValidator: Add all codes from ISO 3166-1 alpha-2 except unassigned
code elements
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8a75397..652f669 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -66,7 +66,8 @@
   <body>

   <release version="1.9.0" date="YYYY-MM-DD" description="Maintenance and bug fix release.">

     <!-- ADD -->

-    <action type="update" dev="ggregory" due-to="ashoknan2, Gary Gregory">ISINValidator: Added 9 additional exception country code #129.</action>

+    <action type="update" dev="ggregory" due-to="ashoknan2, Gary Gregory">ISINValidator: Add 9 additional exception country code #129.</action>

+    <action type="update" dev="ggregory" due-to="Gary Gregory">ISINValidator: Add all codes from ISO 3166-1 alpha-2 except unassigned code elements.</action>

     <!-- FIX -->

     <action type="fix" issue="VALIDATOR-492" dev="ggregory" due-to="Tobias Wildgruber, Gary Gregory">ValidatorUtils.copyFastHashMap is broken.</action>

     <!-- UPDATE -->

diff --git a/src/main/java/org/apache/commons/validator/routines/ISINValidator.java b/src/main/java/org/apache/commons/validator/routines/ISINValidator.java
index cc785c1..3ff30c3 100644
--- a/src/main/java/org/apache/commons/validator/routines/ISINValidator.java
+++ b/src/main/java/org/apache/commons/validator/routines/ISINValidator.java
@@ -60,19 +60,368 @@
 
     private static final String [] CCODES = Locale.getISOCountries();
 
-    private static final String [] SPECIALS = {
-            "EZ", // http://www.anna-web.org/standards/isin-iso-6166/
-            "XS", // https://www.isin.org/isin/
-            "XA", // https://www.iso.org/obp/ui/#iso:pub:PUB500001:en
+    /**
+     * All codes from ISO 3166-1 alpha-2 except unassigned code elements.
+     *
+     * From https://www.iso.org/obp/ui/#iso:pub:PUB500001:en as of 2024-03-23.
+     */
+    private static final String[] SPECIALS = {
+            "AA",
+            "AC",
+            "AD",
+            "AE",
+            "AF",
+            "AG",
+            "AI",
+            "AL",
+            "AM",
+            "AN",
+            "AO",
+            "AP",
+            "AQ",
+            "AR",
+            "AS",
+            "AT",
+            "AU",
+            "AW",
+            "AX",
+            "AZ",
+            "BA",
+            "BB",
+            "BD",
+            "BE",
+            "BF",
+            "BG",
+            "BH",
+            "BI",
+            "BJ",
+            "BL",
+            "BM",
+            "BN",
+            "BO",
+            "BQ",
+            "BR",
+            "BS",
+            "BT",
+            "BU",
+            "BV",
+            "BW",
+            "BX",
+            "BY",
+            "BZ",
+            "CA",
+            "CC",
+            "CD",
+            "CF",
+            "CG",
+            "CH",
+            "CI",
+            "CK",
+            "CL",
+            "CM",
+            "CN",
+            "CO",
+            "CP",
+            "CQ",
+            "CR",
+            "CS",
+            "CT",
+            "CU",
+            "CV",
+            "CW",
+            "CX",
+            "CY",
+            "CZ",
+            "DD",
+            "DE",
+            "DG",
+            "DJ",
+            "DK",
+            "DM",
+            "DO",
+            "DY",
+            "DZ",
+            "EA",
+            "EC",
+            "EE",
+            "EF",
+            "EG",
+            "EH",
+            "EM",
+            "EP",
+            "ER",
+            "ES",
+            "ET",
+            "EU",
+            "EV",
+            "EW",
+            "EZ",
+            "FI",
+            "FJ",
+            "FK",
+            "FL",
+            "FM",
+            "FO",
+            "FQ",
+            "FR",
+            "FX",
+            "GA",
+            "GB",
+            "GC",
+            "GD",
+            "GE",
+            "GF",
+            "GG",
+            "GH",
+            "GI",
+            "GL",
+            "GM",
+            "GN",
+            "GP",
+            "GQ",
+            "GR",
+            "GS",
+            "GT",
+            "GU",
+            "GW",
+            "GY",
+            "HK",
+            "HM",
+            "HN",
+            "HR",
+            "HT",
+            "HU",
+            "HV",
+            "IB",
+            "IC",
+            "ID",
+            "IE",
+            "IL",
+            "IM",
+            "IN",
+            "IO",
+            "IQ",
+            "IR",
+            "IS",
+            "IT",
+            "JA",
+            "JE",
+            "JM",
+            "JO",
+            "JP",
+            "JT",
+            "KE",
+            "KG",
+            "KH",
+            "KI",
+            "KM",
+            "KN",
+            "KP",
+            "KR",
+            "KW",
+            "KY",
+            "KZ",
+            "LA",
+            "LB",
+            "LC",
+            "LF",
+            "LI",
+            "LK",
+            "LR",
+            "LS",
+            "LT",
+            "LU",
+            "LV",
+            "LY",
+            "MA",
+            "MC",
+            "MD",
+            "ME",
+            "MF",
+            "MG",
+            "MH",
+            "MI",
+            "MK",
+            "ML",
+            "MM",
+            "MN",
+            "MO",
+            "MP",
+            "MQ",
+            "MR",
+            "MS",
+            "MT",
+            "MU",
+            "MV",
+            "MW",
+            "MX",
+            "MY",
+            "MZ",
+            "NA",
+            "NC",
+            "NE",
+            "NF",
+            "NG",
+            "NH",
+            "NI",
+            "NL",
+            "NO",
+            "NP",
+            "NQ",
+            "NR",
+            "NT",
+            "NU",
+            "NZ",
+            "OA",
+            "OM",
+            "PA",
+            "PC",
+            "PE",
+            "PF",
+            "PG",
+            "PH",
+            "PI",
+            "PK",
+            "PL",
+            "PM",
+            "PN",
+            "PR",
+            "PS",
+            "PT",
+            "PU",
+            "PW",
+            "PY",
+            "PZ",
+            "QA",
+            "QM",
+            "QN",
+            "QO",
+            "QP",
+            "QQ",
+            "QR",
+            "QS",
+            "QT",
+            "QU",
+            "QV",
+            "QW",
+            "QX",
+            "QY",
+            "QZ",
+            "RA",
+            "RB",
+            "RC",
+            "RE",
+            "RH",
+            "RI",
+            "RL",
+            "RM",
+            "RN",
+            "RO",
+            "RP",
+            "RS",
+            "RU",
+            "RW",
+            "SA",
+            "SB",
+            "SC",
+            "SD",
+            "SE",
+            "SF",
+            "SG",
+            "SH",
+            "SI",
+            "SJ",
+            "SK",
+            "SL",
+            "SM",
+            "SN",
+            "SO",
+            "SR",
+            "SS",
+            "ST",
+            "SU",
+            "SV",
+            "SX",
+            "SY",
+            "SZ",
+            "TA",
+            "TC",
+            "TD",
+            "TF",
+            "TG",
+            "TH",
+            "TJ",
+            "TK",
+            "TL",
+            "TM",
+            "TN",
+            "TO",
+            "TP",
+            "TR",
+            "TT",
+            "TV",
+            "TW",
+            "TZ",
+            "UA",
+            "UG",
+            "UK",
+            "UM",
+            "UN",
+            "US",
+            "UY",
+            "UZ",
+            "VA",
+            "VC",
+            "VD",
+            "VE",
+            "VG",
+            "VI",
+            "VN",
+            "VU",
+            "WF",
+            "WG",
+            "WK",
+            "WL",
+            "WO",
+            "WS",
+            "WV",
+            "XA",
             "XB",
             "XC",
             "XD",
+            "XE",
             "XF",
-            "QS",
-            "QT",
-            "QW",
-            "EU"
-        };
+            "XG",
+            "XH",
+            "XI",
+            "XJ",
+            "XK",
+            "XL",
+            "XM",
+            "XN",
+            "XO",
+            "XP",
+            "XQ",
+            "XR",
+            "XS",
+            "XT",
+            "XU",
+            "XV",
+            "XW",
+            "XX",
+            "XY",
+            "XZ",
+            "YD",
+            "YE",
+            "YT",
+            "YU",
+            "YV",
+            "ZA",
+            "ZM",
+            "ZR",
+            "ZW",
+            "ZZ",
+    };
 
     static {
         Arrays.sort(CCODES); // we cannot assume the codes are sorted
diff --git a/src/test/java/org/apache/commons/validator/routines/ISINValidatorTest.java b/src/test/java/org/apache/commons/validator/routines/ISINValidatorTest.java
index cd418da..74098f1 100644
--- a/src/test/java/org/apache/commons/validator/routines/ISINValidatorTest.java
+++ b/src/test/java/org/apache/commons/validator/routines/ISINValidatorTest.java
@@ -70,7 +70,7 @@
     };
 
     // Invalid codes if country checking is enabled
-    private final String[] invalidFormatTrue = { "AA0000000006", // Invalid country code
+    private final String[] invalidFormatTrue = { "AB0000000006", // Invalid country code
     };
 
     @Test