It takes one minute to make someone's day, and one word to destroy someone's life.

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. [code language="csharp"] /// <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; }[/code]

comments powered by Disqus