2016-03-30 9 views
2

後でデコードできる8バイトの英数字の文字列にdatetime varをエンコードする必要があります。私はあまりにも多くのセキュリティを必要としません。datetime var in vb6

201603301639 -> X5AHY6J9 

とviceversa。

+0

適合しません。 'Date'データ型には64ビットが必要ですが、スペースは48ビットよりもわずかです(大文字と小文字、数字の0〜9を仮定)。 – Bob77

+0

私は日付とエンコーディング時間だけを共用できませんでした。 e。 "1247"。 – Polarix

答えて

0

数字形式の最高の日付の値999912312359はDoubleに収まり、Base36に変換されたときには、あなたの要件を満たす"CRCPZ21Z"の文字列を出力します。

エンコーダ機能hereと、このデコーダを使用する:

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 

次のことができます。

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

?base36decode((x)) 
999912312359 

これはエンコーディングではなく、暗号化されます。 弱難読化の場合、各ルーチンが使用するアルファベット文字列の文字順を単純に切り替えるか、入力値に対して任意の算術演算を実行します。

+0

これはとてもうまく動作します。どうも有り難う、わが友よ。 – Polarix