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
Calculo del RFC México
- Joel Andujo
- Posts: 109
- Joined: Fri Oct 07, 2005 3:14 pm
- Location: Cd. Obregón, Sonora, México
- Contact:
Fernando, esta usamos nosotros espero te sirva
Saludos
Joel Andujo
Saludos
Joel Andujo
Code: Select all
*----------------------------*
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)
Gracias Joel
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
Si tiene solo un apellido usar...
Si la cadena resultante es ofensiva como CACA cambiar la ultima letra por una X. etc, etc.
Saludos