[php] av号 bv号 互转

参考(caoxi)自 mcfx的回答 https://www.zhihu.com/question/381784377/answer/1099438784

正文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF';
$tr = [];
for ($i = 0; $i !== 58; $i++){
$tr[$table[$i]] = $i;
}
$s = [11,10,3,8,4,6];
$add = 8728348608;

function dec($x){
global $tr,$s,$add;
$r = 0;
for ($i = 0; $i !== 6; $i++){
$r += $tr[$x[$s[$i]]]*pow(58,$i);
}
return ($r-$add)^177451812;
}

function enc($x){
global $add,$table,$s;
$x = ($x^177451812) + $add;
$r = 'BV1 4 1 7 ';
for ($i = 0; $i !== 6; $i++){
$k = floor($x/pow(58,$i)%58);
$r[$s[$i]] = $table[$k];
}
return $r;
}

print(dec('BV17x411w7KC')."\n");
print(dec('BV1Q541167Qg')."\n");
print(dec('BV1mK4y1C7Bz')."\n");
print(enc(170001)."\n");
print(enc(455017605)."\n");
print(enc(882584971)."\n");

###输出

1
2
3
4
5
6
170001
455017605
882584971
BV17x411w7KC
BV1Q541167Qg
BV1mK4y1C7Bz

题外话

bv号很早就有了


小三转正了,23333333

分享到: