Boa tarde gente,

Estive testando um algoritmo para a geração de dígitos verificadores de CPF com base no método do "resto de 11", como um projeto extracurricular em uma disciplina. Estou usando Arduino, ele geraria números randômicos e teria a saída serial o CPF final (com no futuro tela LCD).

O problema é que ele está sempre dando a saída o mesmo número, ou seja, o random não está funfando. Alguém tem alguma ideia, vendo o código usado abaixo?

int D1;
int D2;
int D3;
int D4;
int D5;
int D6;
int D7;
int D8;
int D9;
int S1;
int S2;
int S3;
int S4;
int S5;
int S6;
int S7;
int S8;
int S9;
int soma1;
int res1;
int dig1;
int soma2;
int res2;
int dig2;
int verifica1;
int verifica2;


void setup(){
Serial.begin(9600);
}

void loop() {
D1 = random(1, 10);
D2 = random(1, 10);
D3 = random(1, 10);
D4 = random(1, 10);
D5 = random(1, 10);
D6 = random(1, 10);
D7 = random(1, 10);
D8 = random(1, 10);
D9 = random(1, 10);

S1 = D1 * 10;
S2 = D2 * 9;
S3 = D3 * 8;
S4 = D4 * 7;
S5 = D5 * 6;
S6 = D6 * 5;
S7 = D7 * 4;
S8 = D8 * 3;
S9 = D9 * 2;

soma1 = S1 + S2 + S3 + S4 + S5 + S6 + S7 + S8 + S9;

res1 = soma1%11;
verifica1 = 11 - res1;

if(verifica1 < 2) {
verifica1 = 0;
}

S1 = D1 * 11;
S2 = D2 * 10;
S3 = D3 * 9;
S4 = D4 * 8;
S5 = D5 * 7;
S6 = D6 * 6;
S7 = D7 * 5;
S8 = D8 * 4;
S9 = D9 * 3;
res1 = dig1 * 2;

soma2 = S1 + S2 + S3 + S4 + S5 + S6 + S7 + S8 + S9 + dig1;

dig2 = soma2 % 11;
verifica2 = 11 - dig2;

if(verifica2 < 2) {
verifica2 = 0;
}
Serial.print("CPF: ");
Serial.print(D1);
Serial.print(D2);
Serial.print(D3);
Serial.print(D4);
Serial.print(D5);
Serial.print(D6);
Serial.print(D7);
Serial.print(D8);
Serial.print(D9);
Serial.print(verifica1);
Serial.println(verifica2);
delay(10000);
}

Obrigado e boa páscoa!

Exibições: 181

Responder esta

Respostas a este tópico

Falta inicializar o gerador de números aleatórios, faça isso no setup().

Veja aqui como fazer: http://arduino.cc/en/Reference/RandomSeed

Grande Luís! Tudo funcionando, obrigado!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço