... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Caractere especial em senha gerada automaticamente

Usuário Samuel:

Avelino,

há alguns dias que graças a sua ajuda, foi possível criar um código onde é gerado uma senha, automaticamente, na soma dos caracteres do CPF do usuário. Agora senti a necessidade de adicionar também um caractere especial tipo: #,$,*,&.  Criei uma tabela onde, pela lógica usada na geração de senha pelo número de CPF do usuário, o código possa buscar este caractere especial.

Ex: no CPF de número 123.456.789-98 temos as seguintes somas:

1 + 2 + 3 = 6
4 + 5 + 6 = 15
7 + 8 + 9 = 24
9 + 8 = 17

Então, obtemos como resultado a seqüência 6152417 .

Baseado na coluna hexadecimal da tabela ASCII, a senha é 060F1811

Sabendo que o valor destes grupos de três dígitos pode chegar ao máximo de 27.  Então, criei a tabela com 27 caracteres especiais.  Quero que no código abaixo, nas soma dos dígitos, conforme explicado acima, ele inclua um caractere especial de acordo com a tabela que criei.

Public Function fncGerarSenha(CPF$)
Dim j%, p(4) As Variant
CPF = Replace(Replace(CPF, ".", ""), "-", "")
For j = 1 To 11
    Select Case j
        Case 1 To 3: p(0) = p(0) + Val(Mid(CPF, j, 1))
        Case 4 To 6: p(1) = p(1) + Val(Mid(CPF, j, 1))
        Case 7 To 9: p(2) = p(2) + Val(Mid(CPF, j, 1))
        Case 10 To 11: p(3) = p(3) + Val(Mid(CPF, j, 1))
    End Select
Next
p(0) = Hex(p(0)): p(1) = Hex(p(1))
p(2) = Hex(p(2)): p(3) = Hex(p(3))
fncGerarSenha = IIf(Len(p(0)) = 1, "0" & p(0), p(0)) & IIf(Len(p(1)) = 1, _
"0" & p(1), p(1)) & IIf(Len(p(2)) = 1, "0" & p(2), _
p(2)) & IIf(Len(p(3)) = 1, "0" & p(3), p(3))
End Function

Desde já, agradeço.

Suporte:

Samuel, em que posição você vai querer o caractere especial? No final do código?  Exemplo:

para o CPF 123.456.789-98 ::::> 060F1811x

Aonde x seria o resultado da soma dos três primeiros dígitos?

Exemplo do código, sem a necessidade da tabela:

Dim j%, p(5) As Variant, k
CPF = Replace(Replace(CPF, ".", ""), "-", "")
k = Split("*,@,#,$,%,&,!,(,),?,/,:,<,>,+,*,@,#,$,%,&,!,(,),?,/,:", ",")
For j = 1 To 11
    Select Case j
        Case 1 To 3: p(0) = p(0) + Val(Mid(CPF, j, 1))
        Case 4 To 6: p(1) = p(1) + Val(Mid(CPF, j, 1))
        Case 7 To 9: p(2) = p(2) + Val(Mid(CPF, j, 1))
        Case 10 To 11: p(3) = p(3) + Val(Mid(CPF, j, 1))
    End Select
Next
p(4) = k(p(0))
p(0) = Hex(p(0)): p(1) = Hex(p(1))
p(2) = Hex(p(2)): p(3) = Hex(p(3))
fncGerarSenha = IIf(Len(p(0)) = 1, "0" & p(0), p(0)) & IIf(Len(p(1)) = 1, _ 
"0" & p(1), p(1)) & IIf(Len(p(2)) = 1, "0" & p(2), _ 
p(2)) & IIf(Len(p(3)) = 1, "0" & p(3), p(3)) & p(4)
End Function

Usuário Samuel:

Avelino, no meio seria mais interessante.

Suporte:

Samuel, é só deslocar o p(4).  Altere, conforme esta parte:

...
fncGerarSenha = IIf(Len(p(0)) = 1, "0" & p(0), p(0)) & IIf(Len(p(1)) = 1, _ 
"0" & p(1), p(1))  & p(4) & IIf(Len(p(2)) = 1, _ 
"0" & p(2), p(2)) & IIf(Len(p(3)) = 1, "0" & p(3), p(3))
...

Usuário Samuel:

Muito Obrigado novamente pela ajuda, funcionou corretamente.

 


 

 


Não há comentário

Envie seu comentário: