Cartão Chave de Segurança

6 respostas
K

Eu preciso fazer um cartão de chave de segurança (ex: igual o do bradesco que todo cliente possui um cartão para acesso ao internet banking)

alguém conhece alguma API que me ajuda a fazer isso?

Ou alguém tem alguma dica para me ajudar?

Att

6 Respostas

T

Você precisa implementar aquele teste do cartãozinho com 40 posições de 4 dígitos?
Ou você precisa implementar o certificado digital em disquete?
Ou então aquela verificação do “token” (aquele aparelhinho que mostra um número de 6 dígitos, que vale por alguns segundos)?

No primeiro caso, gere 40 números aleatórios, grave-os na sua base.
Quando o cliente for solicitar alguma transação, sorteie um desses números que ainda não foi usado, e peça a sua posição.
No segundo caso, você precisa estudar certificação digital (não é muito trivial)
No terceiro caso, você precisa contactar o fabricante do token (por exemplo, a Vasco Security Systems), que lhe fornecerá o token e também um programa que deve ser usado no servidor.

K

Thingol,

Você precisa implementar aquele teste do cartãozinho com 40 posições de 4 dígitos?

acontece que vou precisar gerar varios cartoes com 50 posições e numa deles pode ser igual.

T

Ora, isso é terrivelmente boboca. Você pode fazer algo como:

private static Random r = new Random();

/** 
 * Sorteia "qtd" números de 4 posições. 
 * @param qtd A quantidade de números 
 * @return Os números sorteados. 
 */
Integer[] sorteiaCartao (int qtd) {
    Set<Integer> sorteados = new ArrayList<Integer>();
    while (sorteados.size() &lt qtd) {
        Integer numero = r.nextInt (10000);
        sorteados.add (numero); 
    }
    // Note que os números não estão em ordem 
    // muito "aleatória". Vamos então pô-los em ordem aleatória
    List<Integer> numeros = new ArrayList<Integer>();
    numeros.addAll (sorteados); 
    Collections.shuffle (numeros); // isto deixa os números em ordem aleatória mesmo!
    return (Integer[]) numeros.toArray (new Integer[0});
}
ThomasCouto

thingol:
Ora, isso é terrivelmente boboca. Você pode fazer algo como:

private static Random r = new Random();

/** 
 * Sorteia "qtd" números de 4 posições. 
 * @param qtd A quantidade de números 
 * @return Os números sorteados. 
 */
Integer[] sorteiaCartao (int qtd) {
    Set<Integer> sorteados = new ArrayList<Integer>();
    while (sorteados.size() &lt qtd) {
        Integer numero = r.nextInt (10000);
        sorteados.add (numero); 
    }
    // Note que os números não estão em ordem 
    // muito "aleatória". Vamos então pô-los em ordem aleatória
    List<Integer> numeros = new ArrayList<Integer>();
    numeros.addAll (sorteados); 
    Collections.shuffle (numeros); // isto deixa os números em ordem aleatória mesmo!
    return (Integer[]) numeros.toArray (new Integer[0});
}

Type mismatch: cannot convert from ArrayList<Integer> to Set<Integer>
:frowning:
A classe Set, se não me engano, não pode conter elementos duplicados né…

Troquei para Arraylist mesmo, talvez apareçam numeros duplicados…

T

Isso é que dá pôr código sem testar :stuck_out_tongue:
O que estava errado, basicamente, é eu ter esquecido de criar a variável “r”, e o HashSet que tinha omitido.

import java.util.*;
class TesteSorteioCartao {
    private static Random r = new Random();
    Integer[] sorteiaCartao (int qtd) {
        Set&lt;Integer&gt; sorteados = new HashSet&lt;Integer&gt;();
        while (sorteados.size() &lt qtd) {
            Integer numero = r.nextInt (10000);
            sorteados.add (numero); 
        }
        // Note que os números não estão em ordem 
        // muito "aleatória". Vamos então pô-los em ordem aleatória
        List&lt;Integer&gt; numeros = new ArrayList&lt;Integer&gt;();
        numeros.addAll (sorteados); 
        Collections.shuffle (numeros); // isto deixa os números em ordem aleatória mesmo!
        return (Integer[]) numeros.toArray (new Integer[0]);
    }
    // Exemplo - por favor, use "String.format ("%04d")" ou algo parecido para 
    // pôr zeros à esquerda, no seu caso. 
    public static void main(String[] args) {
        System.out.println (Arrays.asList (new TesteSorteioCartao().sorteiaCartao(40)));
    }
 }
ThomasCouto

Oi Thingol, tenho uma duvida sobre o código que vc criou

Pra que serve aquele new Integer[0]?

Valeu abraços

Criado 6 de fevereiro de 2007
Ultima resposta 9 de fev. de 2007
Respostas 6
Participantes 3