TODO MANUALES
 
  Home
  Descargas Gratis
  FORO
  Libro de visitantes
  Sitios de Interes
  Horoscopo Chino
  Tarot
  Horoscopo
  Significado de los Sueños
  Paranormal
  Entretenimiento
  Imagenes Fuertes
  Lost 4ta Temporada
  Criss angel
FORO
=> ¿No se ha registrado todavía?

FORO - Codigo para validar RUT en distintos Lenguakes de Programacion

Se encuentra aqui:
FORO => PROGRAMACION => Codigo para validar RUT en distintos Lenguakes de Programacion

<-Volver

 1 

Siguiente->


arcangeltigre
(8 Posts hasta ahora)
21-01-2008 01:01 (UTC)[citar]
Primero en palabras.
ALGORITMO 1

1. Multiplicar cada dígito del RUT se por 2, 3, ..., 7, 2, 3, ... de atrás hacia adelante.
2. Sumar las multiplicaciones parciales.
3. Calcular el resto de la división por 11
4. El Dígito Verificador es 11 menos el resultado anterior. Si es 10, se cambia por 'k'.


EJEMPLO. RUT: 11.222.333

1. 1 1 2 2 2 3 3 3 <-- RUT
* 3 2 7 6 5 4 3 2 <-- 2, 3, 4, 5, 6, 7, 2, 3, ...
--------------------------------------
3 2 14 12 10 12 9 6

2. SUMA: 3 + 2 + 14 + 12 + 10 + 12 + 9 + 6 = 68

3. 68 : 11 = 6
- 66
----
2 <-- RESTO

4. 11 - 2 = 9 <-- DÍGITO VERIFICADOR

__________________________________________________ ____

ALGORITMO 2, versión alternativa

1. Multiplicar cada dígito del RUT se por 9, 8, ..., 4, 9, 8, ... de atrás hacia adelante.
2. Sumar las multiplicaciones parciales.
3. Calcular el resto de la división por 11
4. El Dígito Verificador es el resultado anterior. Si es 10, se cambia por 'k'.


EJEMPLO. RUT: 11.222.333

1. 1 1 2 2 2 3 3 3 <-- RUT
* 8 9 4 5 6 7 8 9 <-- 9, 8, 7, 6, 5, 4, 9, 8, ...
--------------------------------------
8 9 8 10 12 21 24 27

2. SUMA: 8 + 9 + 8 + 10 + 12 + 21 + 24 + 27 = 119

3. 119 : 11 = 10
- 110
-----
9 <-- RESTO

4. 9 <-- DÍGITO VERIFICADOR


__________________________________________________ ____

ALGORITMO 3, propiedades de la división por 11

1. Multiplicar cada dígito del RUT se por 9, 8, ..., 4, 9, 8, ... de atrás hacia adelante.
2. Sumar las multiplicaciones parciales.
3. Suma alternada de la lista reversa de los dígitos del resultado anterior.
4. El Dígito Verificador es el resultado anterior. Si es 10, se cambia por 'k'.


EJEMPLO. RUT: 11.222.333

1. 1 1 2 2 2 3 3 3 <-- RUT
* 8 9 4 5 6 7 8 9 <-- 9, 8, 7, 6, 5, 4, 9, 8, ...
--------------------------------------
8 9 8 10 12 21 24 27

2. SUMA: 8 + 9 + 8 + 10 + 12 + 21 + 24 + 27 = 119

3. SUMA ALTERNADA: 119 -> 9 - 1 + 1 = 9

4. 9 <-- DÍGITO VERIFICADOR


ActionScript, Flash
El código devuelve un true o false solamente, el que la persona que diseñe tiene que asignar la función que quiera. Usa dos campos de textos de input; uno de la pate numerica con la variable "xRut" y otro con el campo del dígito verificador "Dv". Este código va directamente en el boton de "aceptar" en el formulario en cuestión

on (release){
// Definicion de Variables Utilizadas
var Suma = 0;
var rut = xRut;
var NumMag = 2;
var Resto = 0;
// Defino el arreglo con los posibles digitos verificadores
var DigVer = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "K", "0";
var ParteNumerica = new Array();

// Valida que el rut no este vacio
if (rut.length == 0) { return false; }

// Copio solo la parte numerica, sin espacios ni puntos
// en otra variable para calcular el digito verificador
for (j=0, i=0; j<rut.length; j++)
{
if (rut.charAt(j) != ' ' && rut.charAt(j) != '.' && rut.charAt(j) != '-'
{
ParteNumerica[i] = rut.charAt(j);
++i;
}
}

// Se calcula el digito verificador del rut
for (i=ParteNumerica.length-1; i>=0; i--, NumMag++)
{
Suma += ParteNumerica[i]*NumMag;
trace(Suma +' '+ ParteNumerica[i] +' '+ NumMag);
if (NumMag>6) { NumMag = 1; }
}

Resto = 11-(Suma%11);
if (DigVer[Resto] != Dv.toUpperCase())
{
trace("Rut válido";
}
else
{
trace("Rut no válido";
}
}

ASP

Function codigo_veri(rut)
tur=strreverse(rut)
mult = 2

for i = 1 to len(tur)
if mult > 7 then mult = 2 end if

suma = mult * mid(tur,i,1) + suma
mult = mult +1
next

valor = 11 - (suma mod 11)

if valor = 11 then
codigo_veri = "0"
elseif valor = 10 then
codigo_veri = "k"
else
codigo_veri = valor
end if
end function


C

main(){
int T,M=0,S=1;
scanf("%d",&T);
for(;T;T/=10)S=(S+T%10*(9-M++%6))%11;
printf("%c\n",S?S+47:75);
}

C Sharp C#

private string digitoVerificador(int rut)
{
int Digito;
int Contador;
int Multiplo;
int Acumulador;
string RutDigito;

Contador = 2;
Acumulador = 0;

while (rut != 0)
{
Multiplo = (rut % 10) * Contador;
Acumulador = Acumulador + Multiplo;
rut = rut/10;
Contador = Contador + 1;
if (Contador ==
{
Contador = 2;
}

}

Digito = 11 - (Acumulador % 11);
RutDigito = Digito.ToString().Trim();
if (Digito == 10 )
{
RutDigito = "K";
}
if (Digito == 11)
{
RutDigito = "0";
}
return (RutDigito);
}

}

Clipper

FUNCTION validarut(rut)

Local ext:=SUBSTR(rut,12,1)
local x:=0
local divisor:={3,2,7,6,5,4,3,2}
Local suma:=0
local vuelta := .F.
rut:=SUBSTR(rut,1,2)+SUBSTR(rut,4,3)+SUBSTR(rut,8, 3)
if ext == "k"
ext:= "K"
endif
FOR x := 1 TO 8
suma += VAL(SUBSTR(rut,x,1))* divisor [x]
NEXT
suma := 11 - suma%11
if (suma == 10 .and. ext == "K" .OR. (suma == 11 .and. ext == "0"
vuelta=.T.
elseif suma == VAL(ext)
vuelta=.T.
endif
if vuelta==.T.
tone(7800,2)
else
tone(1800,2)
endif
RETURN (vuelta)

COBOL

rutdig.
move spaces to ctrl
display nada line 10 position 57
accept rut-aux no beep
line 10 position 57
inspect rut-aux replacing leading " " by "0"
if numerostr is numeric and guion = "-"
move 0 to suma
move 2 to numerador
perform varying puntero-vector from 8 by -1
until puntero-vector = 0
compute suma = suma +
numeroval(puntero-vector) * numerador
add 1 to numerador
if numerador = 8 move 2 to numerador end-if
end-perform
divide suma by 11 giving entero remainder resto
compute dig = 11 - resto
if dig = 10
move "k" to digi2
else
if dig = 11
move "0" to digi2
end-if
end-if
if digito = "k"
move "k" to digito
end-if
if digito not = digi2
display spaces
line 10 position 57
display spaces line 10 position 60
display "digito no corresponde"
line 10 position 57 blink
accept nulo
display nada line 10 position 57

else
move rut-aux to rut-w
move "e" to ctrl
end-if

else
display spaces
line 10 position 57
display spaces line 10 position 62
display "Rut mal ingresado!!"
line 10 position 57 blink
accept nulo
display nada
line 10 position 57

end-if.

Delphi

Function ValRut(Rut: String):String;
var
Cuenta, Suma, totalrut, Revisa : Integer;
begin
Suma:=2;
TotalRut:=0;
For Cuenta:=Length(Trim(rut)) downto 1 do
begin
if Suma>7 then Suma:=2;
Totalrut:=Totalrut+((StrToInt(copy(rut,cuenta,1))) *suma);
Suma:=Suma+1;
end;
Revisa:=Round((frac(Totalrut/11)*10)+0.5);
Revisa:=11-revisa;
If Revisa=10 then Result:='K'
else
begin
If Revisa=11 then Result:='0'
else Result:=IntToStr(Revisa);
end;
end;

Excel

Function dv(a)
j = 2
For i = 0 To Len(a) - 1
aux = aux + Val(Mid$(a, Len(a) - i, 1)) * j
If j > 6 Then
j = 2
Else
j = j + 1
End If
Next i
aux1 = 11 - (aux Mod 11)
If aux1 < 10 Then
dv = aux1
Else
dv = "K"
End If
End Function

Java

class v{ public static void main(String args[]){int M=0,S=1,T=
Integer.parseInt(args[0]);for(;T!=0;T/=10)S=(S+T%10*(9-M++%6))%11;
System.out.println((char)(S!=0?S+47:75));}}


JavaScript

function dv(T){var M=0,S=1;for(;T;T=Math.floor(T/10))
S=(S+T%10*(9-M++%6))%11;return S?S-1:'k';}


Pascal

Program DigitoVerificador;

Uses Crt;

Var s, d: String;
elFactor, i, a, digito, dummy: Integer;

PROCEDURE Input(mensaje: String; VAR numero: String);
VAR s: String; ch: Char;
ready: Boolean;
BEGIN

s:='';
ready:=FALSE;
Write(mensaje);

REPEAT
ch:=ReadKey;
CASE ch OF
'0': IF s='' THEN BEGIN
s:=ch;
Write(ch);
END ELSE IF (s<>'0' THEN BEGIN
s:=Concat(s,ch);
Write(ch);
END;
'1'..'9': IF (s='0' THEN BEGIN
s:=ch;
Write(#8, s);
END ELSE BEGIN
s:=Concat(s,ch);
Write(ch);
END;
#8: IF s<>'' THEN BEGIN { backspace elimina el último }
s:=Copy(s,1,Length(s)-1); { caracter del string
(siempre }
Write(#8,' ',#; { que éste no sea vacío) }
END;
#13: IF (s='' THEN Write(#7) ELSE ready:=TRUE;
{ ENTER: listo para transformar a }
{ número, pero no acepta uno nulo }
ELSE ; { no hacer caso a ninguna otra tecla }
END; {case}
UNTIL ready;

Writeln;
numero:=s; { retornar el valor ingresado }

END;


FUNCTION Factor: Integer;
BEGIN
if ((elFactor<2) or (elFactor>7)) THEN BEGIN
writeln('ERROR EN LA EJECUCION DEL PROGRAMA - MEJOR ABORTO.';
Halt(1);
END ELSE BEGIN
elFactor:=elFactor+1;
IF (elFactor= THEN elFactor:=2;
END;
Factor:=elFactor;
END;


BEGIN

Writeln('Para finalizar, ingrese el RUT 0';
Writeln;

REPEAT
elFactor:=7; a:=0;
Input('Ingrese el RUT sin guión ni dígito verificador :', s);

FOR i:=Length(s) DOWNTO 1 DO BEGIN
d:=Copy(s,i,1);
Val(d,digito,dummy);
a:=a+digito*Factor;
END;
a:=11-(a MOD 11); IF (a=11) THEN a:=0;

write('El RUT ingresado es: ', s, '. El dígito verificador es: ';
IF (a<>10) THEN writeln(a) ELSE writeln('K';
writeln;

UNTIL (s='0';

END.

Perl

sub dv{$_=pop;$r+=$&*(9-$c++%6)while s/\d$//;$r%11>9?k:$r%11;}

PHP

<?php
function dv($r){$s=1;for($m=0;$r!=0;$r/=10)$s=($s+$r%10*(9-$m++%6))%11;
return chr($s?$s+47:75);}
?>

PostgreSQL

CREATE OR REPLACE FUNCTION digito_verificador(varchar)
RETURNS char AS '
DECLARE
rut ALIAS FOR $1;
rut_cero varchar(;
valor int;
BEGIN
valor := 0;
rut_cero := lpad(rut,8,''0'';

valor := valor + (substring(rut_cero,8,1)::int*2;
valor := valor + (substring(rut_cero,7,1)::int*3;
valor := valor + (substring(rut_cero,6,1)::int*4;
valor := valor + (substring(rut_cero,5,1)::int*5;
valor := valor + (substring(rut_cero,4,1)::int*6;
valor := valor + (substring(rut_cero,3,1)::int*7;
valor := valor + (substring(rut_cero,2,1)::int*2;
valor := valor + (substring(rut_cero,1,1)::int*3;

valor := valor % 11;

IF valor =1 THEN
RETURN ''K'';
END IF;
IF valor =0 THEN
RETURN ''0'';
END IF;
IF valor>1 AND valor<11 THEN
RETURN (11-valor)::char;
END IF;
END
' LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION valida_rut(varchar(9))
RETURNS bool AS '
DECLARE
rutfull ALIAS FOR $1;
rutfull_cero varchar(9);
rut varchar(;
dv char;
BEGIN
IF rutfull IS NULL THEN
RETURN TRUE;
END IF;

rutfull_cero := lpad(rutfull,9,''0'';
rut:= substr(rutfull_cero,0,9);
dv := substr(rutfull_cero,9,1);

IF digito_verificador(rut)=upper(dv) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END
' LANGUAGE plpgsql;


Visual Basic

Public Function RutDigito(ByVal Rut As Long) As String
Dim Digito As Integer
Dim Contador As Integer
Dim Multiplo As Integer
Dim Acumulador As Integer

Contador = 2
Acumulador = 0
While Rut <> 0
Multiplo = (Rut Mod 10) * Contador
Acumulador = Acumulador + Multiplo
Rut = Rut \ 10
Contador = Contador + 1
If Contador = 8 Then
Contador = 2
End If
Wend
Digito = 11 - (Acumulador Mod 11)
RutDigito = CStr(Digito)
If Digito = 10 Then RutDigito = "K"
If Digito = 11 Then RutDigito = "0"
End Function

Visual FoxPro

FUNCTION Val_Rut
PARAMETERS rut,digver
STORE 0 TO suma
STORE 2 TO j
Largo = LEN(rut)

FOR i = Largo TO 1 STEP -1
Dig = VAL(SUBSTR(rut,i,1))
suma = suma + (Dig * j)
IF j = 7
j = 1
ENDIF
j = j + 1
ENDFOR
RESTO = MOD(suma,11)
DO CASE
CASE RESTO = 0
dv = 0
CASE RESTO = 1
dv = "K"
IF digver = "k" OR digver = "K"
* WAIT 'RUT INCORRECTO!!!' WINDOWS
RETURN .F.
ENDIF
RETURN .T.
OTHERWISE
dv = 11 - RESTO
ENDCASE
IF digver == ALLTRIM(STR(dv))
RETURN .T.
ELSE
* WAIT 'RUT INCORRECTO!!!' WINDOWS
RETURN .F.
ENDIF
ENDFUNC

arcangeltigre
(8 Posts hasta ahora)
21-01-2008 01:05 (UTC)[citar]
EXELENTE AOPORTE O NO? OPINEN
matias (Visitante)
05-07-2015 19:15 (UTC)[citar]
en c no me toma la declaracion de string

Respuesta:

Tu nombre de usuario:

 Color de texto:

 Tamaño de letra:
Cerrar tags



Temas totales: 10
Entradas totales: 12
Usuarios totales: 9
En este momento conectados (usuarios registrados): Nadie crying smiley
 
   
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis