Hola!
Les comparto la siguiente funcion que estoy utilizando para la validacion de RFC, esto es valido para Mexico, tengo un problema con la validacion y no es precisamente la funcion, es algo que debe validar pero aun no lo tiene implementado por que no se como puedo incluirlo, espero me puedan ayudar.
Problema: En la normativa aplicada para mexico se han comensado a incluir nuevos caracteres que antes no eran considerados, tal es el caso de la "Ñ" y el "&" por lo que la "Ñ" ya se incluye en la funcion pero en el caso de el "&" la funcion manda un exception, les pongo el mensaje que envia y la cadena de Pattern que uso, espero me puedan ayudar.
Pattern ="([A-Z-Ñ-&]{4})([0-9]{6})([A-Z-Ñ-&0-9]{3})"
Error = analizando "([A-Z-Ñ-&]{4})([0-9]{6})([A-Z-Ñ-&0-9]{3})" - Intervalo [x-y] en orden inverso.
Private Function RFCValido(ByVal StrRFC As String) As Boolean
Dim StrPattern As String = Nothing
Dim IntError As Integer = 0
StrRFC = Regex.Replace(StrRFC, "[*/_" + Chr(32) + Chr(45) + "]", "")
Try
If Not (StrRFC = Nothing) Then
If StrRFC.Length = 12 Then
StrPattern = "([A-Z-Ñ]{3})([0-9]{6})([A-Z-Ñ0-9]{3})"
ElseIf StrRFC.Length = 13 Then
StrPattern = "([A-Z-Ñ]{4})([0-9]{6})([A-Z-Ñ0-9]{3})"
Else
StrPattern = "([0-9])"
IntError = -1
End If
If (IntError = 0) Then
StrRFC = StrRFC.ToUpper
If OraNumReg(1, StrRFC) = 0 Then
If Regex.IsMatch(StrRFC, StrPattern) Then
Return True
Else
Return False
End If
Else
Return False
End If
Else
Return False
End If
Else
Return False
End If
Catch ex As Exception
Return False
End Try
End Function