je suis confronté à un problème de chaine de caractères cryptée. Je vous explique un peu c'est simplement un insert de données en vb 6 de Excel vers Mysql. Je parcours mon fichier excel et j'insert à chaque fois, cependant ma variable NumeroSim est cryptée de cette facon :
a la base NumeroSim = "15278459612562"
seulement le cryptage est que tous les 2 caractères en partant de la gauche j'inverse les 2 chiffres et au dernier je rajoute 2
donc NumeroSim = "51724895165228"
Ma question est donc la suivante comment je peux coder cela ? car j'en ai strictement aucune idée..
Le msgbox au debut te sert juste à afficher le numéro de SIM que tu vas crypter, c'est inutile non ?
>> non, la chaine une fois cryptée.... (euh, tu as pas testé ?)
donc pour le +2 qui ne s'applique qu'au dernier chiffre :
Private Function Crypt(ByVal vsInString As String) As String
Dim xbChars() As Byte
Dim bSwap As Byte
Dim nLastIndex As Long
Dim i As Long
'# Si la taille de la chaine d'entrée est impaire, on ajoute un 0
If Len(vsInString) And 1 Then
vsInString = vsInString & "0"
End If
'# On place la chaine dans nu tableau d'octets.
'# Chaque case de ce dernier contient le code ascii de chacun des caractères
xbChars = StrConv(vsInString, vbFromUnicode)
nLastIndex = UBound(xbChars)
'# On parcoure le tableau, 2 cases par deux cases
For i = 0 To nLastIndex - 1 Step 2
'# Bête invertion de deux caractères consécutifs
bSwap = xbChars(i)
xbChars(i) = xbChars(i + 1)
If i = nLastIndex - 1 Then
'# Si le dernier caractère est un 8 ou un 9...
If bSwap >= 56 Then
'# On lui soustrait 8 (10-2)
bSwap = bSwap - 8
Else
'# Sinon, on lui ajoute 2
bSwap = bSwap + 2
End If
End If
xbChars(i + 1) = bSwap
Next i
'# On renvoie la chaine de caractères cryptée
Crypt = StrConv(xbChars, vbUnicode)
End Function
Private Sub Form_Load()
MsgBox Crypt("15278459612562")
End Sub
Private Function Crypt(ByRef vsInString As String) As String
Dim xbChars() As Byte
Dim bSwap As Byte
Dim nLength As Long
Dim i As Long
xbChars = StrConv(vsInString, vbFromUnicode)
nLength = UBound(xbChars)
For i = 0 To nLength - 1 Step 2
bSwap = xbChars(i)
xbChars(i) = xbChars(i + 1)
If i = nLength - 1 Then
bSwap = bSwap + 2
End If
xbChars(i + 1) = bSwap
Next i
J'ai réfléchis à un truc ou je ne connais pas encore la réponse car mon supérieur est en réunion mais, il n'existe pas un autre moyen car on me parle de pattern ?
Pour ce qui est de la question c'est que :
Admettons, le num sim 15 24 58 95 46 23 99<?xml:namespace prefix o ns = "urn:schemas-microsoft-com:office:office" /??>
Bon j'ai eu la réponse à mon problème apparement on ne pas avoir une Sim qui se termine par 99 mais uniquement 9 ce qui donnera par exemple :
15 24 58 95 46 23 9
donc :
51 42 85 59 64 32 01
Sinon pourrais-tu si ca te dérange pas de commenter ton code, car pour un dev comme toi ca parait tout simple, mais je n'ai que 3 mois d'expérience, et je m'interesse bien à ton code
Private Sub Form_Load()
MsgBox Crypt("15278459612562")
End Sub
Private Function Crypt(ByVal vsInString As String) As String
Dim xbChars() As Byte
Dim bSwap As Byte
Dim i As Long
'# Si la taille de la chaine d'entrée est impaire, on ajoute un 0
If Len(vsInString) And 1 Then
vsInString = vsInString & "0"
End If
'# On place la chaine dans nu tableau d'octets.
'# Chaque case de ce dernier contient le code ascii de chacun des caractères
xbChars = StrConv(vsInString, vbFromUnicode)
'# On parcoure le tableau, 2 cases par deux cases
For i = 0 To UBound(xbChars) - 1 Step 2
'# Bête invertion de deux caractères consécutifs
bSwap = xbChars(i)
xbChars(i) = xbChars(i + 1)
xbChars(i + 1) = bSwap
Next i
'# On renvoie la chaine de caractères à laquelle on ajoute 2
Crypt = Val(StrConv(xbChars, vbUnicode)) + 2
End Function
non car en fait c'est comme si il avait un "0" imaginaire 15 24 58 95 46 23 90 c'est même15 24 58 95 46 23 03 ^^
Sinon merci beaucoup pour tes commentaires ! Ca fait plaisir :)
Le msgbox au debut te sert juste à afficher le numéro de SIM que tu vas crypter, c'est inutile non ?