转好了。MsgBox(0,"",EncodeUser("13213asdf12",True))
;函数计算号码 (参数 用户名, 参数 是否算号 算号为真 不算为假)
Func EncodeUser($UserName,$IsCreateCode=False)
;如果是要算号,则开始算号,否则返回用户名。
Local $EncodeUser="" ;定义结果字符串
If $IsCreateCode=True Then
;定义变量 输出字符串 字典字符串
Local $OutStr="",$DicStr="9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST"
; 输入字符串等于用户名 这几个是干什么的?
Local $InputStr=$UserName , $Num4=0x25,$var3 = 0 , $di , $var2 , $index
; 字典数组 输入字符数组 输出字符数组 字典数组2
Local $DicArray[StringLen($DicStr)],$InputStrArray[StringLen($InputStr)],$OutPutArray[500],$DicB[16]
;字典数组2赋值。
$DicB[0] = 0X11
$DicB[1] = 0X34
$DicB[2] = 0XC9
$DicB[3] = 0X23
$DicB[4] = 0X75
$DicB[5] = 0X18
$DicB[6] = 0XD7
$DicB[7] = 0XE2
$DicB[8] = 0X12
$DicB[9] = 0X35
$DicB[10] = 0X29
$DicB[11] = 0X2B
$DicB[12] = 0XEC
$DicB[13] = 0XB6
$DicB[14] = 0X23
$DicB[15] = 0X19
;将字典字符串按位拆分到字典数组中去。
For $ff = 0 To StringLen($DicStr) - 1 Step 1
$DicArray[$ff] = StringMid($DicStr, $ff + 1, 1)
Next
;将输入字符串(用户名) 按位拆分到输入数组中去。
For $ff=0 To StringLen($InputStr)-1 Step 1
$InputStrArray[$ff]=StringMid($InputStr,$ff+1,1)
Next
;开始算号。具体算法我没有分析。
For $i = 0 To StringLen($inputstr) - 1 Step 1
For $j = 0 To StringLen($DicStr) - 1 Step 1
If $InputStrArray[$i] = $DicArray[$j] Then
If $i >= 0x10 Then
$di = $DicB[Mod($i,0x10)]
Else
$di = $DicB[$i]
EndIf
$var2 = $num4 * 3
$index = Mod((BitXOR(BitXOR($di,$var2),$var3) + $j),0x3E )
$OutPutArray[$i] = $DicArray[$index]
$var2 = $index
$num4 = BitXOR($num4,($var2+0x24D9))
EndIf
Next
If $OutPutArray[$i] = "" Then
$OutPutArray[$i] = $InputStrArray[$i]
EndIf
$var3 = $var3 + 5
Next
;算出的号存在输出数组中。 这个FOR循环是将输出数组中的所有元素组合成一个字符串。
For $kk = 0 To UBound($OutPutArray)-1
If $OutPutArray[$kk] <> "" Then
$outstr = $outstr&$OutPutArray[$kk]
EndIf
Next
;输出字符串前加上1:这2个字符
$outstr = "1:"&$outstr
$EncodeUser = $outstr
Else
$EncodeUser = $UserName
EndIf
Return $EncodeUser
EndFunc
|