0

En Mexico el RFC consta de 12 o 13 digitos Persona fisica es de 13 digitos (4 letras, 6 dígitos y 3 caracteres alfanuméricos) Persona moral es de 12 digitos (3 letras, 6 números y 3 caracteres alfanuméricos) Debo agregar un cliente y me solicita el RFC por lo que yo valide la longitud pero quisiera que tambien tuviera el formato correcto. Mi metodo de validacion es el siguiente

    if (txtRFC.Text.Length == 12 || txtRFC.Text.Length == 13)
        {
            return true;
        }
   else{
            errorProvider1.SetError(txtRFC,"Longitud debe de ser 12 o 13 caracteres")
       }
Hiram F
  • 59
  • 6
  • 2
    ¿Responde esto a tu pregunta? [¿Cómo validar un RFC de México y su digito verificador?](https://es.stackoverflow.com/questions/31713/c%c3%b3mo-validar-un-rfc-de-m%c3%a9xico-y-su-digito-verificador) – BetaM Sep 21 '21 at 00:47

2 Answers2

0
private bool CheckRFC(string RFCString)
        {
            try
            {
                if ((string.IsNullOrEmpty(RFCString)) || (string.IsNullOrWhiteSpace(RFCString)))  //Verifica que no venga nulo o en blanco el RFC
                {
                    throw new ArgumentNullException ("RFCString","RFC esta vacío");
                }
                else
                {
                    RFCString = String.Concat(RFCString.Where(c => !Char.IsWhiteSpace(c)));     // Quita cualquier espacio en blanco de la cadena
                    RFCString = RFCString.ToUpper();  // Pasa a mayusculas el RFC

                    if (RFCString.Length == 13)
                    {
                        // 
                        try
                        {
                            string rfcName =  (RFCString.Substring(0,4));
                            string rfcDate = (RFCString.Substring(4,6));
                            string rfcHomoClave = (RFCString.Substring(10,3));

                            bool isDigitPresent = rfcName.Any(c=> char.IsDigit(c));
                            if (isDigitPresent)
                            {
                                throw new Exception("Existe un digito en los primeros 4 caracteres del RFC");
                                return false;
                            }
                            else     // Es correcto el nombre en el RFC
                            {
                                if (rfcDate.All(char.IsDigit)) // Es correcta la fecha de nacimiento
                                {
                                   return true;
                                }
                                else  // Es incorrecta la fecha de nacimiento
                                {
                                    throw new Exception("Existen caracteres en la fecha de nacimiento del RFC");
                                    return false;
                                }
                            }


                        }
                        catch (Exception)
                        {

                            throw;
                        }
                    }
                    else
                    {
                        throw new ArgumentException("RFCString","Error en la longitud del RFC, deben ser 12 caracteres");
                        return false;
                    }

                }

            }
            catch (Exception ex)
            {

                throw;
            }
masterguru
  • 10,365
  • 2
  • 9
  • 25
  • Método que verifica el RFC. El código va desde el encabezado de la respuesta. Saludos ! – Arturo Briones Mar 08 '22 at 03:43
  • Tal y como está redactada, tu respuesta no es clara. Por favor, pulsa en [edit] para añadir detalles adicionales que ayuden a los demás a entender cómo esto responde a la pregunta formulada. Puedes encontrar más información sobre cómo escribir buenas respuestas [en el centro de ayuda](/help/how-to-answer). – Comunidad Mar 08 '22 at 12:25
0

aqui te pongo un ejemplo con regex, la primera es para fisica, ya es cuestion tuya de acomodarlo a tus necesidades

if (Regex.IsMatch(txtRFC.Text, "[A-z]{4}[0-9]{6}[A-z0-9]{3}")||Regex.IsMatch(txtRFC.Text, "[A-z]{3}[0-9]{6}[A-z0-9]{3}"))                                                          
    {
        return true;
    }
else{
        errorProvider1.SetError($"El texto: {txtRFC.Text} no es un RFC valido")
   }
Luis Garcia
  • 657
  • 1
  • 10