php代码转换成python_B站的AV号和BV转换【Python+PHP】

1. 缘由

最近B站把原先的AV号转换成了BV号,由于某些原因我们需要AV号和BV号互转;

2. Python源码

# -*- coding: UTF-8 -*-

table='fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'

tr={}

for i in range(58):

tr[table[i]]=i

s=[11,10,3,8,4,6]

xor=177451812

add=8728348608

def dec(x):

r=0

for i in range(6):

r+=tr[x[s[i]]]*58**i

return (r-add)^xor

def enc(x):

x=(x^xor)+add

r=list('BV1 4 1 7 ')

for i in range(6):

r[s[i]]=table[x//58**i%58]

return ''.join(r)

print(dec('BV17x411w7KC'))

print(dec('BV1Q541167Qg'))

print(dec('BV1mK4y1C7Bz'))

print(enc(98791488))

print(enc(455017605))

print(enc(882584971))

3. PHP源码

<?php

class Bilibili{

protected $table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";

protected $tr = [];

protected $s = [11, 10, 3, 8, 4, 6];

protected $xor = 177451812;

protected $add = 8728348608;

public function __construct($id=null)

{

for ($i = 0; $i < 58; $i++) {

$this->tr[$this->table[$i]] = $i;

}

}

public function dec($id){

$r = 0;

for ($i = 0; $i < 6; $i++) {

$r += $this->tr[$id[$this->s[$i]]] * 58 ** $i;

}

return ($r - $this->add) ^ $this->xor;

}

public function enc($id){

$id = ($id ^ $this->xor) + $this->add;

$r = str_split('BV1 4 1 7 ');

for ($i = 0; $i < 6; $i++) {

$r[$this->s[$i]] = $this->table[floor($id / 58 ** $i) % 58];

}

return implode("",$r);

}

}

?>

好了,仅用于研究用途;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值