Ejemplo n.º 1
0
        /// <summary>
        /// Checks if a string value is a valid CPF representation
        /// </summary>
        /// <param name="value">a CPF string to be checked</param>
        /// <param name="punctuation">the punctuation setting to
        /// how validation must be handled</param>
        /// <returns>true if CPF string is valid; false otherwise</returns>
        internal static bool Validate(string value, CpfPunctuation punctuation)
        {
            if (StringHelper.IsNullOrWhiteSpace(value))
            {
                return(false);
            }

            if (!Regex.IsMatch(value, CpfHelper.regexValidations[punctuation]))
            {
                return(false);
            }

            value = CpfHelper.Sanitize(value);

            if (CpfHelper.IsSameDigit(value))
            {
                return(false);
            }

            var inputDigit1 = int.Parse(
                value.Substring(9, 1),
                CultureInfo.InvariantCulture);

            var inputDigit2 = int.Parse(
                value.Substring(10, 1),
                CultureInfo.InvariantCulture);

            var calcDigit1 = CpfHelper.CreateChecksum(value.Substring(0, 9));
            var calcDigit2 = CpfHelper.CreateChecksum(value.Substring(0, 10));

            return(inputDigit1 == calcDigit1 && inputDigit2 == calcDigit2);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Cpf"/> class.
        /// </summary>
        /// <param name="value">a valid CPF string.</param>
        /// <param name="punctuation">the punctuation setting to
        /// how validation must be handled.</param>
        public Cpf(string value, CpfPunctuation punctuation)
        {
            if (StringHelper.IsNullOrWhiteSpace(value))
            {
                throw new ArgumentException("O CPF não pode ser nulo ou branco");
            }

            if (!CpfHelper.Validate(value, punctuation))
            {
                throw new ArgumentException("O CPF não é válido");
            }

            this.parsedValue = CpfHelper.Sanitize(value);

            this.Punctuation = punctuation;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Completes a partial CPF string by appending a valid checksum trailing
        /// </summary>
        /// <param name="value">a partial CPF string with or without punctuation</param>
        /// <returns>a CPF string with a valid checksum trailing</returns>
        internal static string Complete(string value)
        {
            if (StringHelper.IsNullOrWhiteSpace(value))
            {
                throw new ArgumentException("O CPF é inválido");
            }

            value = CpfHelper.Sanitize(value);

            if (!Regex.IsMatch(value, @"\d{9}"))
            {
                throw new ArgumentException("O CPF é inválido");
            }

            int digit1 = CpfHelper.CreateChecksum(value);
            int digit2 = CpfHelper.CreateChecksum(value + digit1.ToString());

            return(value + digit1.ToString() + digit2.ToString());
        }