IsIsin

    /// <summary>
    /// Determines if a string is a valid ISIN (International Securities Identification Number) code
    /// </summary>
    /// <remarks>
        /// Port from Java code at http://en.wikipedia.org/wiki/International_Securities_Identification_Number
        /// </remarks>
    public static class IsinHelper
    {
        private static readonly Regex Pattern = new Regex("[A-Z]{2}([A-Z0-9]){10}", RegexOptions.Compiled);

        /// <summary>
        /// True se a string passada for um ISIN válido
        /// </summary>
        public static bool IsIsin(this string isin)
        {
            if (string.IsNullOrEmpty(isin))
            {
                return false;
            }
            if (!Pattern.IsMatch(isin))
            {
                return false;
            }

            var digits = new int[22];
            int index = 0;
            for (int i = 0; i < 11; i++)
            {
                char c = isin[i];
                if (c >= '0' && c <= '9')
                {
                    digits[index++] = c - '0';
                }
                else if (c >= 'A' && c <= 'Z')
                {
                    int n = c - 'A' + 10;
                    int tens = n/10;
                    if (tens != 0)
                    {
                        digits[index++] = tens;
                    }
                    digits[index++] = n%10;
                }
                else
                {
                    // Not a digit or upper-case letter.
                    return false;
                }
            }
            int sum = 0;
            for (int i = 0; i < index; i++)
            {
                int digit = digits[index - 1 - i];
                if (i%2 == 0)
                {
                    digit *= 2;
                }
                sum += digit/10;
                sum += digit%10;
            }

            int checkDigit = isin[11] - '0';
            if (checkDigit < 0 || checkDigit > 9)
            {
                // Not a digit.
                return false;
            }
            int tensComplement = (sum%10 == 0) ? 0 : ((sum/10) + 1)*10 - sum;
            return checkDigit == tensComplement;
        }
    }
Example:
string s = "US0378331005";
Debug.Assert(s.IsIsin());

s = "AU0000XVGZA3";
Debug.Assert(s.IsIsin());

s = "GB0002634946";
Debug.Assert(s.IsIsin());

s = null;
Debug.Assert(!s.IsIsin());

s = "";
Debug.Assert(!s.IsIsin());

s = "us0378331005"; // lowercase
Debug.Assert(!s.IsIsin());

s = "US0378331004"; // wrong digit
Debug.Assert(!s.IsIsin());

Description

Determines if a string is a valid ISIN (International Securities Identification Number) code.

Details

Double click on the code to select all.

 

;