Post Pic

UCommerce for Umbraco Extension Method – ISO 3166 Numeric Country Codes

Once again my recent work has brought me back around to messing around with Globalisation issues again. This time it is with regards to writing a customer payment provider for UCommerce implementing the HSBC XML API. Certain fraud rules were being flagged on all transactions during testing due to an incorrect or missing country code, checking the documentation again it reads “The 3 digit ISO country code for the customer’s country”, this is in fact not the alpha but numeric country representation as defined by ISO 3166 Country Codes. Unfortunately this cannot be obtained through the .Net Framework alone as I have done with similar issues previously so I needed to write an extension method as advised by Søren Spelling Lund in this forum post.

In case this is of use to anyone else I am posting up my extension method as this will also have uses outside of UCommerce for Umbraco.

        /// <summary>
        /// Gets the ISO3166 Numeric Country Code
        /// </summary>
        /// <param name="country">The country.</param>
        /// <returns>The ISO3166 NUmeric Country Code</returns>
        public static int GetIsoNumericCode(this EntitiesV2.Country country)
        {
            var countryCodesInEu = new Dictionary<string, int>
                                       {
                                           { "AND", 20 },
                                           { "ARE", 784 },
                                           { "AFG", 4 },
                                           { "ATG", 28 },
                                           { "AIA", 660 },
                                           { "ALB", 8 },
                                           { "ARM", 51 },
                                           { "ANT", 530 },
                                           { "AGO", 24 },
                                           { "ATA", 10 },
                                           { "ARG", 32 },
                                           { "ASM", 16 },
                                           { "AUT", 40 },
                                           { "AUS", 36 },
                                           { "ABW", 533 },
                                           { "ALA", 248 },
                                           { "AZE", 31 },
                                           { "BIH", 70 },
                                           { "BRB", 52 },
                                           { "BGD", 50 },
                                           { "BEL", 56 },
                                           { "BFA", 854 },
                                           { "BGR", 100 },
                                           { "BHR", 48 },
                                           { "BDI", 108 },
                                           { "BEN", 204 },
                                           { "BMU", 60 },
                                           { "BRN", 96 },
                                           { "BOL", 68 },
                                           { "BRA", 76 },
                                           { "BHS", 44 },
                                           { "BTN", 64 },
                                           { "BVT", 74 },
                                           { "BWA", 72 },
                                           { "BLR", 112 },
                                           { "BLZ", 84 },
                                           { "CAN", 124 },
                                           { "CCK", 166 },
                                           { "COD", 180 },
                                           { "CAF", 140 },
                                           { "COG", 178 },
                                           { "CHE", 756 },
                                           { "CIV", 384 },
                                           { "COK", 184 },
                                           { "CHL", 152 },
                                           { "CMR", 120 },
                                           { "CHN", 156 },
                                           { "COL", 170 },
                                           { "CRI", 188 },
                                           { "SCG", 891 },
                                           { "CUB", 192 },
                                           { "CPV", 132 },
                                           { "CXR", 162 },
                                           { "CYP", 196 },
                                           { "CZE", 203 },
                                           { "DEU", 276 },
                                           { "DJI", 262 },
                                           { "DNK", 208 },
                                           { "DMA", 212 },
                                           { "DOM", 214 },
                                           { "DZA", 12 },
                                           { "ECU", 218 },
                                           { "EST", 233 },
                                           { "EGY", 818 },
                                           { "ESH", 732 },
                                           { "ERI", 232 },
                                           { "ESP", 724 },
                                           { "ETH", 231 },
                                           { "FIN", 246 },
                                           { "FJI", 242 },
                                           { "FLK", 238 },
                                           { "FSM", 583 },
                                           { "FRO", 234 },
                                           { "FRA", 250 },
                                           { "GAB", 266 },
                                           { "GBR", 826 },
                                           { "GRD", 308 },
                                           { "GEO", 268 },
                                           { "GUF", 254 },
                                           { "GHA", 288 },
                                           { "GIB", 292 },
                                           { "GRL", 304 },
                                           { "GMB", 270 },
                                           { "GIN", 324 },
                                           { "GLP", 312 },
                                           { "GNQ", 226 },
                                           { "GRC", 300 },
                                           { "SGS", 239 },
                                           { "GTM", 320 },
                                           { "GUM", 316 },
                                           { "GNB", 624 },
                                           { "GUY", 328 },
                                           { "HKG", 344 },
                                           { "HMD", 334 },
                                           { "HND", 340 },
                                           { "HRV", 191 },
                                           { "HTI", 332 },
                                           { "HUN", 348 },
                                           { "IDN", 360 },
                                           { "IRL", 372 },
                                           { "ISR", 376 },
                                           { "IND", 356 },
                                           { "IOT", 86 },
                                           { "IRQ", 368 },
                                           { "IRN", 364 },
                                           { "ISL", 352 },
                                           { "ITA", 380 },
                                           { "JAM", 388 },
                                           { "JOR", 400 },
                                           { "JPN", 392 },
                                           { "KEN", 404 },
                                           { "KGZ", 417 },
                                           { "KHM", 116 },
                                           { "KIR", 296 },
                                           { "COM", 174 },
                                           { "KNA", 659 },
                                           { "PRK", 408 },
                                           { "KOR", 410 },
                                           { "KWT", 414 },
                                           { "CYM", 136 },
                                           { "KAZ", 398 },
                                           { "LAO", 418 },
                                           { "LBN", 422 },
                                           { "LCA", 662 },
                                           { "LIE", 438 },
                                           { "LKA", 144 },
                                           { "LBR", 430 },
                                           { "LSO", 426 },
                                           { "LTU", 440 },
                                           { "LUX", 442 },
                                           { "LVA", 428 },
                                           { "LBY", 434 },
                                           { "MAR", 504 },
                                           { "MCO", 492 },
                                           { "MDA", 498 },
                                           { "MDG", 450 },
                                           { "MHL", 584 },
                                           { "MKD", 807 },
                                           { "MLI", 466 },
                                           { "MMR", 104 },
                                           { "MNG", 496 },
                                           { "MAC", 446 },
                                           { "MNP", 580 },
                                           { "MTQ", 474 },
                                           { "MRT", 478 },
                                           { "MSR", 500 },
                                           { "MLT", 470 },
                                           { "MUS", 480 },
                                           { "MDV", 462 },
                                           { "MWI", 454 },
                                           { "MEX", 484 },
                                           { "MYS", 458 },
                                           { "MOZ", 508 },
                                           { "NAM", 516 },
                                           { "NCL", 540 },
                                           { "NER", 562 },
                                           { "NFK", 574 },
                                           { "NGA", 566 },
                                           { "NIC", 558 },
                                           { "NLD", 528 },
                                           { "NOR", 578 },
                                           { "NPL", 524 },
                                           { "NRU", 520 },
                                           { "NIU", 570 },
                                           { "NZL", 554 },
                                           { "OMN", 512 },
                                           { "PAN", 591 },
                                           { "PER", 604 },
                                           { "PYF", 258 },
                                           { "PNG", 598 },
                                           { "PHL", 608 },
                                           { "PAK", 586 },
                                           { "POL", 616 },
                                           { "SPM", 666 },
                                           { "PCN", 612 },
                                           { "PRI", 630 },
                                           { "PSE", 275 },
                                           { "PRT", 620 },
                                           { "PLW", 585 },
                                           { "PRY", 600 },
                                           { "QAT", 634 },
                                           { "REU", 638 },
                                           { "ROU", 642 },
                                           { "RUS", 643 },
                                           { "RWA", 646 },
                                           { "SAU", 682 },
                                           { "SLB", 90 },
                                           { "SYC", 690 },
                                           { "SDN", 736 },
                                           { "SWE", 752 },
                                           { "SGP", 702 },
                                           { "SHN", 654 },
                                           { "SVN", 705 },
                                           { "SJM", 744 },
                                           { "SVK", 703 },
                                           { "SLE", 694 },
                                           { "SMR", 674 },
                                           { "SEN", 686 },
                                           { "SOM", 706 },
                                           { "SUR", 740 },
                                           { "STP", 678 },
                                           { "SLV", 222 },
                                           { "SYR", 760 },
                                           { "SWZ", 748 },
                                           { "TCA", 796 },
                                           { "TCD", 148 },
                                           { "ATF", 260 },
                                           { "TGO", 768 },
                                           { "THA", 764 },
                                           { "TJK", 762 },
                                           { "TKL", 772 },
                                           { "TLS", 626 },
                                           { "TKM", 795 },
                                           { "TUN", 788 },
                                           { "TON", 776 },
                                           { "TUR", 792 },
                                           { "TTO", 780 },
                                           { "TUV", 798 },
                                           { "TWN", 158 },
                                           { "TZA", 834 },
                                           { "UKR", 804 },
                                           { "UGA", 800 },
                                           { "UMI", 581 },
                                           { "USA", 840 },
                                           { "URY", 858 },
                                           { "UZB", 860 },
                                           { "VAT", 336 },
                                           { "VCT", 670 },
                                           { "VEN", 862 },
                                           { "VGB", 92 },
                                           { "VIR", 850 },
                                           { "VNM", 704 },
                                           { "VUT", 548 },
                                           { "WLF", 876 },
                                           { "WSM", 882 },
                                           { "YEM", 887 },
                                           { "MYT", 175 },
                                           { "ZAF", 710 },
                                           { "ZMB", 894 },
                                           { "ZWE", 716 },
                                       };

            var regionInfo = new RegionInfo(country.Culture);

            if (countryCodesInEu.Keys.Contains(regionInfo.ThreeLetterISORegionName))
                return countryCodesInEu[country.Name];

            return -1;
        }

Umbraco Certified Developer
SagePay Approved Partner
Creative Market