-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
204 lines (177 loc) · 7.02 KB
/
script.js
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
function aplicarMascaraCPF() {
// Obtém o elemento HTML do campo de entrada "cpfInput".
var cpfInput = document.getElementById("cpfInput");
// Remove todos os caracteres não numéricos do valor atual do campo de entrada "cpfInput".
var cpf = cpfInput.value.replace(/\D/g, "");
// Define a máscara inicial do CPF como "___.___.___-__".
var formattedCPF = "___.___.___-__";
// Substitui cada caractere não numérico na máscara com o próximo caractere numérico do CPF.
for (var i = 0; i < cpf.length && i < formattedCPF.length; i++) {
formattedCPF = formattedCPF.replace("_", cpf.charAt(i));
}
// Define o valor do campo de entrada "cpfInput" como a nova máscara do CPF.
cpfInput.value = formattedCPF;
}
// Obtém o elemento HTML do campo de entrada "cpfInput".
var cpfInput = document.getElementById("cpfInput");
// Adiciona um ouvinte de evento de entrada ao campo de entrada "cpfInput" que chama a função "aplicarMascaraCPF" toda vez que o valor do campo é alterado.
cpfInput.addEventListener("input", aplicarMascaraCPF);
// Adiciona um ouvinte de evento de teclado ao campo de entrada "cpfInput" que impede que o usuário insira qualquer caractere que não seja um número, Backspace, Delete, ArrowLeft, ArrowRight ou Tab.
cpfInput.addEventListener("keydown", function (event) {
if (
event.key !== "Backspace" &&
event.key !== "Delete" &&
event.key !== "ArrowLeft" &&
event.key !== "ArrowRight" &&
event.key !== "Tab" &&
!isNumeric(event.key)
) {
event.preventDefault();
}
});
// Define a função que verifica se um determinado caractere é numérico
function isNumeric(key) {
return /\d/.test(key);
}
// Obtém o elemento de input do CPF
var cpfInput = document.getElementById("cpfInput");
// Adiciona um listener para o evento "input", que é acionado quando o valor do input muda
cpfInput.addEventListener("input", aplicarMascaraCPF);
// Adiciona um listener para o evento "keydown", que é acionado quando uma tecla é pressionada
cpfInput.addEventListener("keydown", function (event) {
// Verifica se o valor atual do input já tem 11 caracteres e a tecla pressionada não é uma das permitidas
if (
cpfInput.value.length >= 11 &&
event.key !== "Backspace" &&
isNaN(parseInt(event.key))
) {
event.preventDefault(); // impede que a tecla pressionada tenha efeito no input
}
});
// Define a função que valida o CPF
function validarCPF() {
// Obtém o elemento do input de CPF e o elemento de validação
var cpfInput = document.getElementById("cpfInput");
var cpfValidation = document.getElementById("cpfValidation");
// Remove todos os caracteres não numéricos do CPF
var cpf = cpfInput.value;
cpf = cpf.replace(/\D/g, "");
// Adiciona classe CSS temporária para diminuir a opacidade do elemento do span
cpfValidation.classList.add("fade");
// Define uma função anônima para remover a classe CSS temporária após um segundo
setTimeout(function () {
cpfValidation.classList.remove("fade");
}, 400);
// Verifica se o CPF possui 11 dígitos e não é uma sequência de números repetidos
if (
cpf.length !== 11 ||
cpf === "00000000000" ||
cpf === "11111111111" ||
cpf === "22222222222" ||
cpf === "33333333333" ||
cpf === "44444444444" ||
cpf === "55555555555" ||
cpf === "66666666666" ||
cpf === "77777777777" ||
cpf === "88888888888" ||
cpf === "99999999999"
) {
cpfValidation.innerHTML = "CPF inválido";
cpfValidation.style.color = "red";
return false;
}
// Realiza o cálculo do primeiro dígito verificadores do CPF
var soma = 0;
var resto;
for (var i = 1; i <= 9; i++) {
soma += parseInt(cpf.substring(i - 1, i)) * (11 - i);
}
// Se o resto for 10 ou 11, o dígito verificador deve ser 0
resto = (soma * 10) % 11;
if (resto === 10 || resto === 11) {
resto = 0;
}
// Se o resto não for igual ao 9º dígito verificador do CPF, retorna false
if (resto !== parseInt(cpf.substring(9, 10))) {
cpfValidation.innerHTML = "CPF inválido";
cpfValidation.style.color = "red";
return false;
}
// Realiza o cálculo do segundo dígito verificadores do CPF
soma = 0;
for (i = 1; i <= 10; i++) {
soma += parseInt(cpf.substring(i - 1, i)) * (12 - i);
}
// Se o resto for 10 ou 11, o dígito verificador deve ser 0
resto = (soma * 10) % 11;
if (resto === 10 || resto === 11) {
resto = 0;
}
// Se o resto não for igual ao 10º dígito verificador do CPF, exibe mensagem de erro e retorna false
if (resto !== parseInt(cpf.substring(10, 11))) {
cpfValidation.innerHTML = "CPF inválido";
cpfValidation.style.color = "red";
return false;
}
// Exibe a mensagem de CPF válido e retorna true
cpfValidation.innerHTML = "CPF válido";
cpfValidation.style.color = "green";
return true;
}
// Obtém o elemento de entrada do CPF pelo ID "cpfInput"
var cpfInput = document.getElementById("cpfInput");
// Define uma função "toggleMode" para alternar entre os modos claro e escuro
function toggleMode() {
// Obtém o elemento body do documento
var element = document.body;
// Alterna as classes "dark-mode" e "light-mode" do elemento body
element.classList.toggle("dark-mode");
element.classList.toggle("light-mode");
// Obtém o botão para alternar o modo pelo ID "modeButton"
var button = document.getElementById("modeButton");
// Atualiza o texto do botão com base no modo atual
if (element.classList.contains("dark-mode")) {
button.textContent = "Alterar para Light Mode";
} else {
button.textContent = "Alterar para Dark Mode";
}
}
// Define a função "gerarCPF" que gera um CPF aleatério
function gerarCPF() {
var cpf = "";
// Gera 9 números aleatórios e concatena na variável cpf
for (var i = 0; i < 9; i++) {
cpf += Math.floor(Math.random() * 10);
}
// Calcula o primeiro dígito verificador e concatena na variável cpf
cpf += calcularDV(cpf);
// Calcula o segundo dígito verificador e concatena na variável cpf
cpf += calcularDV(cpf);
// Preenche o campo de input com o CPF gerado
document.getElementById("cpfInput").value = cpf;
aplicarMascaraCPF(); // chamando a função para atualizar a máscara
}
function calcularDV(cpf) {
// Inicializa a variável soma com zero
var soma = 0;
// Percorre cada caractere do CPF e realiza a multiplicação com o respectivo peso
for (var i = 0; i < cpf.length; i++) {
soma += parseInt(cpf.charAt(i)) * (cpf.length + 1 - i);
}
// Calcula o dígito verificador subtraindo o resultado da soma de 11
var dv = 11 - (soma % 11);
// Se o dígito verificador for maior que 9, retorna "0", senão, retorna a string com o valor do dígito verificador
return dv > 9 ? "0" : dv.toString();
}
// Define a função gerarNumerosAleatorios que gera 11 números aleatórios e atualiza o campo de input com o CPF gerado fake
function gerarNumerosAleatorios() {
var numerosAleatorios = "";
// Loop que irá gerar 11 números aleatórios
for (var i = 0; i < 11; i++) {
numerosAleatorios += Math.floor(Math.random() * 10);
}
// Insere os números aleatórios gerados no campo de input de CPF
document.getElementById("cpfInput").value = numerosAleatorios;
// Chama a função que aplica a máscara de CPF no campo
aplicarMascaraCPF();
}