Ver Mensaje Individual
  #14 (permalink)  
Antiguo 22/07/2005, 11:11
Avatar de Myakire
Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 3 meses
Puntos: 146
Segunda parte:

Código:
-- ---------------------------------------------
-- Obtener Digito Verificador
-- ---------------------------------------------
SET @VARLOOPS = 0
SET @T_PARCIAL = 0
WHILE @VARLOOPS < 12
BEGIN
SELECT @VARLOOPS = @VARLOOPS + 1
SET @T_NUMERO =
CASE
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'A' THEN 10
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'B' THEN 11
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'C' THEN 12
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'D' THEN 13
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'E' THEN 14
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'F' THEN 15
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'G' THEN 16
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'H' THEN 17
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'I' THEN 18
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'J' THEN 19
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'K' THEN 20
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'L' THEN 21
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'M' THEN 22
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'N' THEN 23
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'O' THEN 25
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'P' THEN 26
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'Q' THEN 27
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'R' THEN 28
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'S' THEN 29
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'T' THEN 30
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'U' THEN 31
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'V' THEN 32
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'W' THEN 33
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'X' THEN 34
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'Y' THEN 35
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = 'Z' THEN 36
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) >= '0' AND 
SUBSTRING (@RFC , @VARLOOPS , 1) <= '9'

THEN CONVERT(INT,SUBSTRING (@RFC , @VARLOOPS , 1))
WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = ''

THEN 24

WHEN SUBSTRING (@RFC , @VARLOOPS , 1) = ' '

THEN 37

ELSE 0
END
-- Contabilizar el nuevo digito
SELECT @T_PARCIAL = @T_PARCIAL + (@T_NUMERO * (14 - @VARLOOPS))
END 

SET @T_MOD = ROUND(@T_PARCIAL%11,1)
IF @T_MOD = 0

SET @RFC = LTRIM(RTRIM (@RFC)) + '0'
ELSE
BEGIN
SET @T_PARCIAL = 11 - @T_MOD
IF @T_PARCIAL = 10
SELECT @RFC = LTRIM(RTRIM (@RFC)) + 'A'
ELSE
SELECT @RFC = LTRIM(RTRIM (@RFC)) + CONVERT(VARCHAR ,@T_PARCIAL)
END


--SELECT @T_NOMTOT,@T_SUMA

SET @RFC_OUT = @RFC
SELECT @RFC AS 'RFC'

GO
En unos días se los paso en Delphi y ASP.

y aunque este y mucho más fácil e intuitivo. Les dejo el algorítmo del RFC que encontré en el mismo sitio:

Cita:
En este foro vi a una persona que quiere hacer dinero con tal de vender información que es publica para todo mundo pero que es dificil de conseguir....

Es dificil de conseguir precisamente porque hay cuates como este wy que se aprovechan de que tienen un contactito en el SAT y no quieren soltar la sopa con tal de sacar ventaja.

Asi que para evitar este tipo de conflictos, he aqui el algoritmo para el calculo del RFC:

Tomas del Apellido Paterno y eliminas cualquiera de los siguientes articulos:
"Y ", "A ", "DE ", "LA ", "DEL ", "LAS "
De lo que sobra, tomas la primer letra y la primer vocal.

Haces lo mismo con el apellido paterno, pero solo tomas la primer letra, es decir, eliminas los articulos.

Tomas la primer letra del nombre

Tomas las dos cifras del año de nacimiento (por ejemplo: 1976.. tomas 76).

Tomas el numero de mes.

Tomas el numero de dia.

Si naciste en algun dia del 1 al 9, entonces tomas 09. Lo mismo pasa con el mes cuando naciste entre el mes 1 al 9.

La homoclave es otra cosa pero prometo regresar con el calculo algun otro dia.

_Neo_
Saludos y GRACIAS cesar_nava por sacarnos de la ignorancia