2016-03-30 6 views
2

Ich möchte eine Datetime-Variable in eine 8-Byte-alphanumerische Zeichenfolge codieren, die später dekodiert werden kann. Ich brauche nicht zu viel Sicherheit.Encodieren/Decodieren (Verschlüsseln/Entschlüsseln) datetime var in vb6

201603301639 -> X5AHY6J9 

und umgekehrt.

+0

Es wird nicht passen. Der Datentyp "Datum" benötigt 64 Bit, aber Sie haben nur etwas weniger als 48 Bit Speicherplatz (vorausgesetzt, Groß- und Kleinschreibung und Ziffern 0-9). – Bob77

+0

Ich konnte Datum und Codierung nicht nur Zeit, ich. e. "1247". – Polarix

Antwort

0

Der höchste Datumswert in numerischer Form 999912312359 passt in ein Double, und wenn in Base36 konvertiert würde Zeichenfolge "CRCPZ21Z" ausgeben, die Ihre Anforderung erfüllt.

Mit dem Encoder-Funktion here und diese Decoder:

Function base36decode(ByRef base36 As String) As Double 
    Const alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    base36decode = InStr(1, alphabet, Right(base36, 1), vbTextCompare) - 1 
    For i = Len(base36) - 1 To 1 Step -1 
     base36decode = base36decode + 36^(Len(base36) - i) * (InStr(1, alphabet, Mid(base36, i, 1)) - 1) 
    Next i 
End Function 

Sie können:

x = ConvertBase10(999912312359, "ABCDEFGHIJKLMNOPQRSTUVWXYZ") 
?x 
CRCPZ21Z 

?base36decode((x)) 
999912312359 

Dies ist Codierung, keine Verschlüsselung. Für schwache Verschleierung einfach die Reihenfolge der Zeichen in der Alphabet-Zeichenfolge, die jede Routine verwendet oder einige willkürliche Arithmetik auf den Eingabewert zu wechseln.

+0

Das funktioniert sehr gut. Vielen Dank mein Freund. – Polarix