前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Bilibili bv 号 和 av 号 互转算法,php版

Bilibili bv 号 和 av 号 互转算法,php版

作者头像
Alone88
发布2020-06-11 11:32:31
9660
发布2020-06-11 11:32:31
举报
文章被收录于专栏:Alone88Alone88

bv 号 和 av 号 互转

前段时间 Bilibili 已经将 av 号升级为 bv 号了,如 BV1iQ4y1M7EH

算法

github: https://github.com/anhao/bv2av , 欢迎 star

算法参考 :https://www.zhihu.com/question/381784377/answer/1099438784 (这个是 python 版的)

代码语言:javascript
复制
<?php
/**
 * @author : Alone88
 *
 * algorithm:https://www.zhihu.com/question/381784377/answer/1099438784
 *
 * Bilibili AV BV 互转
 *
 * Class Bilibili
 */
class Bilibili
{
    protected $tr = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
    protected $xor = 177451812;
    protected $add = 8728348608;
    protected $s = [11, 10, 3, 8, 4, 6];

    /**
     * BV 转 AV
     *
     * @param $bv
     * @return int
     */
    public function dec($bv)
    {
        $r = 0;
        $tr = array_flip(str_split($this->tr));
        for ($i = 0; $i < 6; $i++) {
            $r += $tr[$bv[$this->s[$i]]] * (pow(58, $i));
        }
        return ($r - $this->add) ^ $this->xor;
    }

    /**
     *
     * AV 转 BV
     *
     * @param $av
     * @return string
     */
    public function enc($av)
    {
        $tr = str_split($this->tr);
        $bv = 'BV1  4 1 7  ';
        $av = ($av ^ $this->xor) + $this->add;
        for ($i = 0; $i < 6; $i++) {
            $bv[$this->s[$i]] = $tr[floor($av/pow(58,$i)%58)];
        }
        return $bv;
    }
}

本文由 Alone88 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为: Apr 1, 2020 at 08:45 pm

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档