Пример #1
0
        public bool Validate()
        {
            if (string.IsNullOrEmpty(CPF))
            {
                return(false);
            }

            var cpf = CPF.Replace(".", "").Replace("-", "");

            if (cpf.Length != 11)
            {
                return(false);
            }

            if (!cpf.All(char.IsNumber))
            {
                return(false);
            }

            var first = cpf[0];

            if (cpf.Substring(1, 10).All(x => x == first))
            {
                return(false);
            }

            int[] multiplier1 = new int[9] {
                10, 9, 8, 7, 6, 5, 4, 3, 2
            };
            int[] multiplier2 = new int[10] {
                11, 10, 9, 8, 7, 6, 5, 4, 3, 2
            };

            string temp;
            string digit;
            int    sum;
            int    rest;

            temp = cpf.Substring(0, 9);
            sum  = 0;

            for (int i = 0; i < 9; i++)
            {
                sum += int.Parse(temp[i].ToString()) * multiplier1[i];
            }
// 873.143.810-54
            rest = sum % 11;

            rest = rest < 2 ? 0 : 11 - rest;

            digit = rest.ToString();
            temp += digit;
            sum   = 0;

            for (int i = 0; i < 10; i++)
            {
                sum += int.Parse(temp[i].ToString()) * multiplier2[i];
            }

            rest = sum % 11;

            rest = rest < 2 ? 0 : 11 - rest;

            digit += rest.ToString();

            if (cpf.EndsWith(digit))
            {
                return(true);
            }

            return(false);
        }