Boas!
É assim eu tenho para fazer um projecto para a disciplina de programação!
Basicamente o projecto é isto ->
aqui
No passo 2.2 tou com umas dúvidas de como fazer para q os números de conta sejam gerados automaticamente, sempre o menor possível....
Se alguém tiver sugestões chute!
0 6 0 7 0 0 1 7 2 6 3 7 2 4 6 3
Vermelho -> Número fixo
Azul -> Número associado ao cartão
Verde -> Números aleatórios em que o que interessa é que:
(16x1 + 15x2 + 14x3 + 13x4 + 12x5 + 11x6 + 10x7 + 9x8 + 8x9 + 7x10 + 6x11 + 5x12 + 4x13 + 3x14 + 2x15 + C) mod 16 = 0
Tu queres que, ao adicionar um cliente, ele tenha o nº mais baixo de todos, certo?
A primeira coisa a fazer, é ir consultando a base de dados (que na minha opinião deve estar numa BST, por exemplo), procurando pela conta: 0607 0000 0000 0000, 0607 0000 0000 0048, e por aí fora, até que encontres uma conta disponível.
O que vais precisar?
De uma função que te devolve true sempre que o código é válido, ou seja, quando respeita a regra:
Os quatro algarismos iniciais são fixos e estão relacionados com a identificação da
entidade bancária, neste caso será 0607. O segundo conjunto de quatro caracteres
identifica o número da conta associado ao cartão, neste caso trata-se da conta número
0017. Os sete algarismos seguintes, i.e. 2637 246, são gerados de forma que o último
algarismo, i.e. o número de controlo C=3, verifica a seguinte fórmula:
(16x1 + 15x2 + 14x3 + 13x4 + 12x5 + 11x6 + 10x7 + 9x8 + 8x9 + 7x10 + 6x11 + 5x12 + 4x13 + 3x14 + 2x15 + C) mod 16 = 0
ou seja, o somatório ponderado dos vários termos dividido por 16 dá resto igual a
zero.
Desta forma, vais gerando 0607 0000 0000 0000, 0607 0000 0000 0000 + 1, 0607 0000 0000 0000 + 2 e passando-os por essa função. Quando retornar true é porque o código é válido: Está na altura de percorrer a estrutura de dados que contem os números de cartões de crédito e verificar se ele já existe ou não! Se não existir é criado, se existir voltas a testar com o número seguinte.
Claro que para isto funcionar eficientemente, a estrutura de dados deve estar ordenada por ordem crescente (no caso de vectores) ou usas mesmo uma BST ou uma Hash Table ordenada pelo número do cartão do cliente.
Alguma dúvida?