C/Visual C - Consulta

 
Vista:

Consulta

Publicado por JuAn (3 intervenciones) el 08/05/2003 21:40:11
Mi consulta es la sgte. si se puede hacer un validador de rut chileno, ocupando todas las variables necesarias y tambien solamente el while, for y el if.

Si se puede hacer como se hace.

De ante mano muchas gracias.
JuAn
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Validador de RUT chileno utilizando estructuras de control

Publicado por Alejandro (1153 intervenciones) el 02/06/2025 17:41:01
Sí, Juan, es posible crear un validador de RUT chileno utilizando solo las estructuras de control `while`, `for` e `if`. A continuación, te muestro un ejemplo de cómo podrías implementar un validador de RUT en C++:

Ejemplo de validador de RUT chileno



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <string>
 
bool validarRUT(const std::string& rut) {
    // Verificar que el RUT tenga el formato correcto
    if (rut.length() < 2 || rut.length() > 10) {
        return false; // Longitud inválida
    }
 
    // Separar el número y el dígito verificador
    std::string numero = rut.substr(0, rut.length() - 2);
    char digitoVerificador = rut[rut.length() - 1];
 
    // Calcular el dígito verificador esperado
    int suma = 0;
    int multiplicador = 2;
 
    // Recorrer el RUT de derecha a izquierda
    for (int i = numero.length() - 1; i >= 0; --i) {
        suma += (numero[i] - '0') * multiplicador;
        multiplicador++;
        if (multiplicador > 7) {
            multiplicador = 2; // Reiniciar el multiplicador
        }
    }
 
    int resto = suma % 11;
    char digitoEsperado;
 
    if (resto == 0) {
        digitoEsperado = '0';
    } else if (resto == 1) {
        digitoEsperado = 'K';
    } else {
        digitoEsperado = '0' + (11 - resto); // Convertir a carácter
    }
 
    // Comparar el dígito verificador calculado con el ingresado
    return digitoVerificador == digitoEsperado;
}
 
int main() {
    std::string rut;
    std::cout << "Ingrese el RUT (formato 12345678-9): ";
    std::cin >> rut;
 
    if (validarRUT(rut)) {
        std::cout << "El RUT es válido." << std::endl;
    } else {
        std::cout << "El RUT es inválido." << std::endl;
    }
 
    return 0;
}

Explicación del código:



1. Validación de formato: Se verifica que el RUT tenga una longitud válida (entre 2 y 10 caracteres).
2. Separación del número y dígito verificador: Se separa el número del RUT y el dígito verificador.
3. Cálculo del dígito verificador: Se utiliza un bucle `for` para recorrer el número del RUT de derecha a izquierda, multiplicando cada dígito por un multiplicador que va de 2 a 7.
4. Cálculo del resto: Se calcula el resto de la suma y se determina el dígito verificador esperado.
5. Comparación: Se compara el dígito verificador ingresado con el calculado.

Notas:


- Este código es un ejemplo básico y puede ser mejorado con validaciones adicionales, como verificar que todos los caracteres sean dígitos (excepto el dígito verificador que puede ser un número o 'K').
- Asegúrate de probar el código con diferentes RUTs para verificar su funcionamiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar