sábado, 27 de noviembre de 2010

CALCULO DE LA HOMONIMIA Y DIGITO VERIFICADOR DEL RFC PARA PERSONAS FISICAS Y MORALES… EN C#

Seguramente alguna vez han tenido la inquietud de querer incluir en sus aplicaciones el cálculo del RFC (tanto para personas físicas y personas moral), ya sea porque se lo pidan los maestros o simplemente por pura inquietud. Es por eso que en esta ocasión quiero mostrar cómo obtener el RFC a 13 dígitos (calculando la homonimia y el digito verificador).

Requisitos:
·         Microsoft Visual Studio (2008 ó 2010)
·         Librería “RFC” (pueden descargarla de aqui)
·         Librería “ConvierteRomanosaLetras” (Viene junto con la librería RFC)

Nota: En el código fuente que se anexa al final de esta publicación viene anexada la librería,  por lo que no es necesario descargar por separado la librería “RFC” J.

Iniciando
Primero crearemos un nuevo proyecto del tipo WinForms, al que llamaremos  ObtieneRFC”, (o como nosotros queramos), modificamos el formulario que nos crea por defecto y nos deberá quedar más o menos de la siguiente manera:
Después de esto agregaremos las referencias necesarias a las librerías  RFC” y “ConvierteRomanosaLetras” (click derecho sobre el proyecto->Agregar Referencia y elegir las 2 librerias):
Obteniendo el RFC

En la vista de código del formulario crearemos un nuevo método, el cual llevará por nombre “Mayus”, y tendrá las siguientes 2 líneas de código:
/// <summary>
/// AL perder el foco la caja de texto, convierte el texto a
/// mayúsculas,para ello asignar este metodo al evento Leave
/// del TextBox
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Mayus(object sender, EventArgs e)
  {
    TextBox texto = (TextBox)sender;
    texto.Text = texto.Text.ToUpper();
  }
Explicar estas dos líneas está de sobra, pero básicamente lo único que hace es convertir a mayúsculas el texto que hay en cualquier TextBox. Pero para que lo haga, en el evento “Leave” de cada TextBox del formulario (a excepción del TextBox donde se muestra el RFC calculado) debemos asignarle el método anteriormente descrito.
Luego en el evento “Load” del formulario agregaremos las siguientes líneas:
private void Form1_Load(object sender, EventArgs e)
  {
     dateTimePicker1.Format = DateTimePickerFormat.Custom;
     dateTimePicker1.CustomFormat = "yy/MM/dd";
     dateTimePicker2.Format = DateTimePickerFormat.Custom;
     dateTimePicker2.CustomFormat = "yy/MM/dd";
  }
Con esto lo que estamos haciendo es mostrar la fecha en el “DateTimePicker” en el formato de “yy/MM/dd”, que en cristiano y con un ejemplo es:
Si la fecha es 23 de mayo de 1980, se mostrará como:80/05/23,


Obteniendo RFC persona física:
En el botón que obtiene el RFC de las personas físicas agregaremos el siguiente código:
private void button1_Click(object sender, EventArgs e)
 {
   RFC.ObtieneRFC rfc = new RFC.ObtieneRFC();
   textBox5.Text = "RFC: {0}";
textBox5.Text =string.Format (textBox5.Text,rfc.RFC13Pocisiones
(textBox3.Text,textBox2.Text,textBox1.Text,dateTimePicker1.Text));

 }
Creamos una instancia de la librería RFC, y el resultado lo mostramos en el TextBox5, recordar que al momento de llamar el método “RFC10Pocisiones”, se le pasan 4 parámetros que son:
  • El apellido paterno
  • El apellido materno
  • La fecha de nacimiento en formato (yy/MM/dd)

Si introducimos los datos de una persona, se deberá hacer el cálculo, por ejemplo:
Hay que recalcar, que al momento de obtener el RFC, se realizan las validaciones siguientes:
  • Si la persona solo tiene un apellido.
  • Si tiene cada apellido está formado por más de 2 palabras.
  • Si de las letras se obtiene una palabra mala (por ejemplo CACA, BUEY, PUTO,…, etc.), la ultima letra se sustituye por una “X” (CACX, BUEX, PUTX,.., etc.).
  • Si el nombre se forma por dos palabras se toma en cuenta solo la primera a excepción de “MARIA o JOSE”.

Todas reglas son las que estipula el SAT.


Obteniendo RFC persona moral:

Para obtener el RFC de una persona moral, introducimos la razón social completa (si es S.A de C.V introducir SA de CV), por ejemplo:
En este caso, tomé un ticket de una recarga que hice en la farmacia Unión, la razón social es “COMERCIALIZADORA FARMACEUTICA DEL SURESTE SA DE CV”, la fecha de formación es “950529”, y observen que obtiene la homonimia (98) y el digito verificador (0) de forma correcta.
No es que haga promoción, pero les quise mostrar un ejemplo real del cálculo.

En la obtención del RFC de persona moral, se hacen las siguientes validaciones:

  • Si en la razón social existe un numero (por ejemplo que la razón social sea “EL 505”), se deberá hacer la conversión del numero a su correspondiente en letras, en este caso para el cálculo, la razón social quedaría de la siguiente manera: “EL QUINIENTOS CINCO”.

  • De la misma forma si existen números romanos igualmente se hace la conversión a letras, por ejemplo para la razón social “EDITORIAL SIGLO XXI”, se deberá tomar como “EDITORIAL SIGLO VEINTIUNO”.

Todas estas reglas y otras más son las que se estipulan en el SAT para la obtención del RFC de personas moral.

En caso que tengan algún inconveniente al momento de querer usar la librería para obtener el RFC, no duden en informarlo. El código de la librería que convierte de romanos a letras la pondré más adelante en otra publicación.

Espero sus comentarios:

J



El código fuente lo pueden descargar de aqui: http://www.mediafire.com/?p72bd8a9qtopf3l

5 comentarios:

  1. q onda carnal, mmm me marca error yo lo hice para vb y ps simplemente no lo hace asi tengo el codigo

    Dim rfc As RFC.ObtieneRFC = New RFC.ObtieneRFC()
    Dim fecha, a, m, d As String
    a = Mid(txtFechaNac.Text, 3, 2)
    m = Mid(txtFechaNac.Text, 6, 2)
    d = Mid(txtFechaNac.Text, 9, 2)

    fecha = a + "/" + m + "/" + d

    txtRFC.Text = "{0}"
    Try
    txtRFC.Text = String.Format(txtRFC.Text, rfc.RFC13Pocisiones(txtApp.Text, txtApm.Text, txtNombre.Text, fecha))
    Catch ex As Exception

    End Try

    ResponderEliminar
  2. Muchas gracias, me podrias enviar el archivo original de la libreria del rfc me interesaria analizar el codigo erikvallesteros@hotmail.com

    ResponderEliminar
  3. que deberia poner en la persona moral.... que pongo en el codigo?

    ResponderEliminar
  4. Se podrá usar esta dll en foxpro, podrías poner el ejemplo en vfp.
    Gracias

    ResponderEliminar