alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010
-
15 janv. 2008 à 16:16
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010
-
16 janv. 2008 à 12:37
bonjour à tous
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..
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 16 janv. 2008 à 10:19
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
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 15 janv. 2008 à 16:41
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
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 15 janv. 2008 à 17:23
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" /??>
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 16 janv. 2008 à 08:50
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
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202172 16 janv. 2008 à 09:55
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
alias666
Messages postés308Date d'inscriptionmardi 1 juin 2004StatutMembreDernière intervention23 mars 2010 16 janv. 2008 à 10:11
15 24 58 95 46 23 9
donc :
51 42 85 59 64 32 01
??
ce serait pas plutot
51 42 85 59 64 32 11
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 ?