av号与bv号之间的关系
本文站在巨人的肩膀上尽可能用简单的语言描述av和bv的互转。请小伙伴们放心食用。

前几天,哔哩矿就把原有的av号改为了bv号。随后就有不少大佬立即理清了它们之间的关系,各平台都有讲解从av到bv变换的原理和过程的分享。结合我自己的理解进行接下来的计算(随便算算)。
(如果觉得有些运算符号不懂或者数字太大没办法算,可以用电脑自带的计算器的科学型模式来辅助;如果只是想知道新BV号原来的av号,直接把本文下拉到最底端)
元:av35556243 ;现:BV1vb411c7eh
准备字符串(这种说法不准确)“26个字母表”:
“fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF”
首先将它们分别依次标上号“0、1、2、···、57”,就是说“0”对应“f”,这样的以此类推。然后把av号后面的“35556243”看成一个普通的数,转换成二进制(百度、谷歌或者双叶一下进位制转换就可以找到在线转换工具)。
“35556243”的二进制:“10000111101000101110010011”
接下来把“177451812”这个“普通”的数(AV0)转化成二进制:“1010100100111011001100100100”
之后的步骤很关键,把这两排数字右对齐摆放,大概是这样:

然后用一种规则再进行一种运算,地球人称为异或运算。规则是“1⊕1=0,0⊕0=0,1⊕0=1,0⊕1=1”,这两排数字上下均为0或1的时候得数为0,所以结果是:
“1000100011010011100010110111”
把这个二进制数转成火星人看得懂的十进制:“143472823”。
接下来再把这个数和数“100618342136696320”相加:
143472823 + 100618342136696320 = 100618342280169143
新的BV号有十位数,所以要对这个数进行十次运算(是时候打开计算器了):
第一次: 100618342280169143 除以58的0次方(58^0=1) 得到的结果100618342280169143"mod"58 = 27
(计算器科学型模式里有“mod”这个按键)
第二次: 100618342280169143 除以58^1(58) 结果取小数点前面(不要四舍五入) 1734799004830502"mod"58 = 24
第三次: 100618342280169143 除以58^2 (58^2=3364) 结果取小数点前面 29910327669491"mod"58 = 23
第四次: 100618342280169143 除以58^3 (195112) 结果取小数点前面 515695304646"mod"58 = 56
第五次: 100618342280169143 除以58^4(11316496) 结果取小数点前面 8891298355"mod"58 = 29
第六次: 100618342280169143 除以58^5(656356768) 结果取小数点前面 153298247"mod"58 = 13
第七次: 100618342280169143 除以58^6(38068692544) 结果取小数点前面 2643073"mod"58 = 13
第八次: 100618342280169143 除以58^7(2207984167552) 结果取小数点前面 45570"mod"58 = 40
第九次: 100618342280169143 除以58^8(128063081718016) 结果取小数点前面 785"mod"58 = 31
第十次: 100618342280169143 除以58^9(7427658739644928)结果取小数点前面13"mod"58= 13
所以就依次得到了“ 27 24 23 56 29 13 13 40 31 13”这十个数。回到刚才的“26个字母表”,把这十个数对应的字符写下来:
“h e v c b 1 1 7 4 1”
众所周知,BV号的"长度"有12位:
B V 2 3 4 5 6 7 8 9 10 11
把上面的字符“h e v c b 1 1 7 4 1”按下面顺序重新组成我们想要的BV号:
11 10 3 8 4 6 2 9 5 7
“h”放到BV号11的位置,···,以此类推。最后得到的BV号:BV1vb411c7eh。

准备字符串(这种说法不准确)“26个字母表”:
“fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF”
按顺序编号。
BV1vb411c7eh中“1vb411c7eh”在“26个字母表”中对应编号是
“13 23 29 31 13 13 56 40 24 27”
接下来按顺序分别将它们乘以58的某一次方(次方的次序“6、2、4、8、5、9、3、7、1、0”顺序不能打乱),即:
13*58^6 = 494893003072
23*58^2 = 77372
29*58^4 = 328178384
31*58^8 = 3969955533258496
13*58^5 = 8532637984
13*58^9 = 96559563615384064
56*58^3 = 10926272
40*58^7 = 88319366702080
24*58^1 = 1392
27*58^0 = 27
上述的总和:100618342280169143,用这一总和减去“100618342136696320”
“100618342280169143 - 100618342136696320 = 143472823”
“143472823”转二进制:“1000100011010011100010110111”
“177451812”(AV0)转二进制:“1010100100111011001100100100”
进行异或运算:
“1000100011010011100010110111”
“1010100100111011001100100100”
得:
“0010000111101000101110010011”
转成十进制:“35556243”
这就是原av号“av35556243” 。这种互转方法在AV134217727前适用。在AV1073741823前可能适用。

参考来源:@mcfx;@justin2018 (V2EX);@Dian_jiao AV98869161;@Peaksol AV99160403;@烟楼天青 AV667585557;@ty1937;@Junior T Wei(FANDOM)。
非常感谢他们以及他们的作品的支持,如果本文里有错误的话还请不吝指正。拖更了这么久其实也是很想给自己腾出一些时间来静下心写一篇专栏(本质是懒)。对于哔哩矿的做法,网上的各种看法相当微妙,但我并不是很关心这些想法(咸鱼),我只是抱着好奇的心态想理解av号和bv号之间的关系,当问题解决了自然就感觉到心里面豁然开朗了~~(怎么突然有点大学时代的那种求真味道了??)这当然也是我写这篇专栏的意义。

快速知道现BV号视频的原本av号是多少,只需要在电脑上打开浏览器(谷歌、火狐浏览器等等),打开那个视频在空白区域右键选择获取网页源代码,大概像这样:

打开后只需要在最前面几行的源代码里找到有 href = “······” 后面就是这个视频的原av号了。或许以后这个方法会失效,但至少目前是可以用的。
密恐的小伙伴可以选择在网页栏里输入“api.bilibili.com/x/web-interface/view?bvid=BV (记得输BV号)在代码第二行找到"aid:av······"也可以查看视频的原有av号。
