Pessoal, estou fazendo uma rotina para validar CGC e CPF mais para isso preciso comprar character a character os códigos ASCII digitados pelo usuário… como eu comparo em java códigos ASCII em, por exemplo em VB ou clipper ou C++ eu faria asc(“a”) e ele me retornaria 97.
Como eu faço em java para testar o código ASCII ou de outra tabela pois sei que o java usa tabelas de conversão distintas ?!?!?!?
Aham, em C++ não tem isso que você falou não.
Na verdade é muito parecido com C++.
Você na verdade não precisa saber os códigos da tabela ASCII (ou ISO-8859-1, ou Unicode, ou seja lá o que for) para validar um simples CPF. A constante ‘a’ já tem o valor 97.
Por exemplo:
String cpf = "012.345.678/99";
boolean valido = true;
for (int i = 0; i < cpf.length(); ++i) {
char ch = cpf.charAt (i);
if (!(ch >= '0' && ch <= '9' || ch == '.' || ch == '/')) {
valido = false;
break;
}
}
Olá, cara não entendi pq vc quer validar via ASCII, pq vc não utiliza validação via caracter mesmo???
Se for o caso, basta vc utilizar os métodos da classe String (olha na api da sun os métodos dela).
Existe uma api da sun (ñ me lembro qual), que pega os ASCII das teclas, o nome é relacionado a KeyCode se bem me lembro, mas ainda acho que vc não necessita da mesma para validação.
Abraços
Vamos complicar então hehehe XD
Vejam como eu faço em VB para validar CPF e CGC pessoal… e vejam pq eu testo o codigo asc do character no primeiro IF:
Function Consiste_CGC_CPF(CGC_CPF As String, CGC_CPF_Format As String)
Rem Credito: Função cedida por Aurelio S. Campos em 03/12/2001
Rem **********************************************************
Rem *******************************
Rem Define as variáveis de trabalho
Rem *******************************
Dim str_Trab_0$, str_Trab_1$, str_Trab_2$
Dim int_Trab_1%, int_Trab_2%, int_Trab_3%, int_Trab_4%
Rem *************************************************
Rem Elimina todos os caracteres que não forem números
Rem *************************************************
str_Trab_1 = Trim(CGC_CPF)
str_Trab_0 = “”
For int_Trab_1 = 1 To Len(str_Trab_1)
If Asc(Mid(str_Trab_1, int_Trab_1, 1)) >= 48 And _
Asc(Mid(str_Trab_1, int_Trab_1, 1)) <= 57 Then
str_Trab_0 = str_Trab_0 + Mid(str_Trab_1, int_Trab_1, 1)
End If
Next
Rem *****************************
Rem Se for CGC, executa o cálculo
Rem *****************************
If Len(str_Trab_0) > 11 Then
For int_Trab_1 = 5 To 6
int_Trab_4 = 0
int_Trab_2 = 0
For int_Trab_3 = int_Trab_1 To 2 Step -1
int_Trab_4 = int_Trab_4 + 1
int_Trab_2 = int_Trab_2 + (Val(Mid(str_Trab_0, int_Trab_4, 1)) * int_Trab_3)
Next
For int_Trab_3 = 9 To 2 Step -1
int_Trab_4 = int_Trab_4 + 1
int_Trab_2 = int_Trab_2 + (Val(Mid(str_Trab_0, int_Trab_4, 1)) * int_Trab_3)
Next
int_Trab_2 = (int_Trab_2 * 10) Mod 11
If int_Trab_2 > 9 Then
int_Trab_2 = 0
End If
str_Trab_2 = str_Trab_2 & Format(int_Trab_2, "0")
Next
Rem *****************************
Rem Se for CGC, executa o cálculo
Rem *****************************
Else
str_Trab_1 = “100908070605040302000000000000111009080706050403020000000000”
For int_Trab_1 = 1 To 2
int_Trab_2 = 0
For int_Trab_3 = 1 To 15
int_Trab_2 = int_Trab_2 + (Val(Mid(str_Trab_0, int_Trab_3, 1)) * Val(Mid(str_Trab_1, (int_Trab_1 * 30 - 30) + (int_Trab_3 * 2 - 1), 2)))
Next
int_Trab_2 = (int_Trab_2 * 10) Mod 11
If int_Trab_2 > 9 Then
int_Trab_2 = 0
End If
str_Trab_2 = str_Trab_2 & Format(int_Trab_2, "0")
Next
End If
Rem ****************************************************
Rem Se o resultado do cálculo for diferente do informado
Rem ****************************************************
Rem Verificar o Digito formatdado - FLAVIO 01/08/2003
Rem ****************************************************
If Val(str_Trab_2) <> Val(Right(CGC_CPF_Format, 2)) Then
Rem ************************
Rem Emite a mensagem de erro
Rem ************************
MsgBox “Dígito de controle do CGC/CPF inconsistente!”, vbExclamation + vbOKOnly, constSistema
Consiste_CGC_CPF = False
Else
Consiste_CGC_CPF = True
End If
End Function
Só para lhe simplificar o trabalho.
Asc(Mid(str_Trab_1, int_Trab_1, 1))
As strings em Java começam na posição 0, não na posição 1 - isso que “quebra as pernas” de um monte de gente boa que veio do VB e do Delphi.
Portanto:
Mid (str_Trab_1, int_Trab_1, 1) --> str_Trab_1.substring(int_Trab_1 - 1, int_Trab_1) (se quiser o resultado como outra String) ou str_Trab_1.charAt (int_Trab_1 - 1) (se quiser o resultado como um ‘char’).
Asc (de um char do Java) --> não precisa usar, pois um ‘char’ do Java é ao mesmo tempo um número (acostume-se com isso).
E, aproveitando a deixa do thingol, ASCII nao existe mais faz tempo, e especialmente nao existe em Java. De uma lida sobre Unicode aqui, pra evitar quebrar as pernas:
Kra, entendi… puts tens razão hehehe agora tah fácil Obrigado hehehe
XD