FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Calculo del RFC México
Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM
Calculo del RFC México
Posted: Tue Jan 24, 2006 04:59 AM

Saludos Colegas,
echandole un vistazo a las antiguas news encontré que ya alguien había solicitado lo mismo.
La rutina para calcular el RFC ¿Está posteada en algún lugar?

Gracias
Fernando Leal
México, DF

Posts: 143
Joined: Fri Oct 07, 2005 03:14 PM
Calculo del RFC México
Posted: Tue Jan 24, 2006 04:14 PM
Fernando, esta usamos nosotros espero te sirva

Saludos
Joel Andujo

*----------------------------*
Func RFC_Val(xvar)
 rfccad:=upper(xvar)
 xvar  :=rfccad
 rfccad:=strtran(rfccad,'-','')
 if empty(left(rfccad,4))
    tone(300,2)
    if msgyesno('R.F.C. No Válido, ¿ Continuar ?','Seleccione Opción...')
       retu.t.
    endi
    retu.f.
 endi
 if ctod(subs(rfccad,9,2)+'/'+subs(rfccad,7,2)+'/'+subs(rfccad,5,2))=ctod('  /  /    ')
    tone(300,2)
    msgalert('Fecha del R.F.C. no es válida','Aviso...')
    retu.f.
 endi
 if Digit_Ver(rfccad)<>right(rfccad,1)
    tone(300,2)
    if msgyesno('R.F.C. No Válido, ¿ Continuar ?','Seleccione Opción...')
       retu.t.
    endi
    retu.f.
 endi
retu.t.

*-------------*
stat proc Digit_Ver()
 para gx_rfc
 local digv:='',gx_asc:=0,gx_car:=0,gx_sum:=0,gx_pos:=0
 for yy:= 1 to 12
     gx_car:=0; gx_pos:=14 - yy
     gx_asc := Asc(SubStr(gx_rfc,yy,1))
     if (gx_asc>47).and.(gx_asc<58)
        gx_car:=(gx_asc-48)
     endi
     if (gx_asc>64).and.(gx_asc<79)
        gx_car:=(gx_asc-55)
     endi
     if (gx_asc>78).and.(gx_asc<91)
        gx_car:=(gx_asc-54)
     endi
     if (gx_asc=38)
        gx_car:=24
     endi
     if gx_asc=32
        gx_car:=37
     endi
     gx_sum:=(gx_sum+gx_car*gx_pos)
 next yy
 gx_asc:=gx_sum - Int(gx_sum/11) * 11
 if (gx_asc<>0).and.(gx_asc<>1)
    digv:=AllTrim(str(11 - gx_asc))
 else
    if gx_asc=0
       digv:='0'
    endi
    if gx_asc=1
       digv:='A'
    endi
 endi
retu(digv)
Posts: 234
Joined: Tue Oct 25, 2005 12:39 AM
Gracias Joel
Posted: Wed Jan 25, 2006 04:58 PM

Yo tengo algo parecido que solo valida las letras y la fecha... ya conseguí las reglas donde dice algunas cosas como
Si tiene solo un apellido usar...
Si la cadena resultante es ofensiva como CACA cambiar la ultima letra por una X. etc, etc.

Saludos

Continue the discussion