av號與bv號之間的關(guān)系
本文站在巨人的肩膀上盡可能用簡單的語言描述av和bv的互轉(zhuǎn)。請小伙伴們放心食用。

前幾天,嗶哩礦就把原有的av號改為了bv號。隨后就有不少大佬立即理清了它們之間的關(guān)系,各平臺(tái)都有講解從av到bv變換的原理和過程的分享。結(jié)合我自己的理解進(jìn)行接下來的計(jì)算(隨便算算)。
(如果覺得有些運(yùn)算符號不懂或者數(shù)字太大沒辦法算,可以用電腦自帶的計(jì)算器的科學(xué)型模式來輔助;如果只是想知道新BV號原來的av號,直接把本文下拉到最底端)
元:av35556243 ;現(xiàn):BV1vb411c7eh
準(zhǔn)備字符串(這種說法不準(zhǔn)確)“26個(gè)字母表”:
“fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF”
首先將它們分別依次標(biāo)上號“0、1、2、···、57”,就是說“0”對應(yīng)“f”,這樣的以此類推。然后把a(bǔ)v號后面的“35556243”看成一個(gè)普通的數(shù),轉(zhuǎn)換成二進(jìn)制(百度、谷歌或者雙葉一下進(jìn)位制轉(zhuǎn)換就可以找到在線轉(zhuǎn)換工具)。
“35556243”的二進(jìn)制:“10000111101000101110010011”
接下來把“177451812”這個(gè)“普通”的數(shù)(AV0)轉(zhuǎn)化成二進(jìn)制:“1010100100111011001100100100”
之后的步驟很關(guān)鍵,把這兩排數(shù)字右對齊擺放,大概是這樣:

然后用一種規(guī)則再進(jìn)行一種運(yùn)算,地球人稱為異或運(yùn)算。規(guī)則是“1⊕1=0,0⊕0=0,1⊕0=1,0⊕1=1”,這兩排數(shù)字上下均為0或1的時(shí)候得數(shù)為0,所以結(jié)果是:
“1000100011010011100010110111”
把這個(gè)二進(jìn)制數(shù)轉(zhuǎn)成火星人看得懂的十進(jìn)制:“143472823”。
接下來再把這個(gè)數(shù)和數(shù)“100618342136696320”相加:
143472823 + 100618342136696320 = 100618342280169143
新的BV號有十位數(shù),所以要對這個(gè)數(shù)進(jìn)行十次運(yùn)算(是時(shí)候打開計(jì)算器了):
第一次: 100618342280169143 除以58的0次方(58^0=1)? ?得到的結(jié)果100618342280169143"mod"58 = 27
(計(jì)算器科學(xué)型模式里有“mod”這個(gè)按鍵)
第二次: 100618342280169143 除以58^1(58) 結(jié)果取小數(shù)點(diǎn)前面(不要四舍五入) 1734799004830502"mod"58 =?24
第三次: 100618342280169143 除以58^2 (58^2=3364) 結(jié)果取小數(shù)點(diǎn)前面 29910327669491"mod"58 =?23
第四次: 100618342280169143 除以58^3 (195112) 結(jié)果取小數(shù)點(diǎn)前面 515695304646"mod"58 = 56
第五次: 100618342280169143 除以58^4(11316496) 結(jié)果取小數(shù)點(diǎn)前面 8891298355"mod"58 = 29
第六次: 100618342280169143 除以58^5(656356768) 結(jié)果取小數(shù)點(diǎn)前面 153298247"mod"58 = 13
第七次: 100618342280169143 除以58^6(38068692544) 結(jié)果取小數(shù)點(diǎn)前面 2643073"mod"58 = 13
第八次: 100618342280169143 除以58^7(2207984167552) 結(jié)果取小數(shù)點(diǎn)前面 45570"mod"58 = 40
第九次: 100618342280169143 除以58^8(128063081718016) 結(jié)果取小數(shù)點(diǎn)前面 785"mod"58 = 31
第十次: 100618342280169143 除以58^9(7427658739644928)結(jié)果取小數(shù)點(diǎn)前面13"mod"58=?13
所以就依次得到了“?27 24 23 56 29 13 13 40 31 13”這十個(gè)數(shù)?;氐絼偛诺摹?6個(gè)字母表”,把這十個(gè)數(shù)對應(yīng)的字符寫下來:
“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。

準(zhǔn)備字符串(這種說法不準(zhǔn)確)“26個(gè)字母表”:
“fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF”
按順序編號。
BV1vb411c7eh中“1vb411c7eh”在“26個(gè)字母表”中對應(yīng)編號是
“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”轉(zhuǎn)二進(jìn)制:“1000100011010011100010110111”
“177451812”(AV0)轉(zhuǎn)二進(jìn)制:“1010100100111011001100100100”
進(jìn)行異或運(yùn)算:
“1000100011010011100010110111”
“1010100100111011001100100100”
得:
“0010000111101000101110010011”
轉(zhuǎn)成十進(jìn)制:“35556243”
這就是原av號“av35556243”?。這種互轉(zhuǎn)方法在AV134217727前適用。在AV1073741823前可能適用。

參考來源:@mcfx;@justin2018?(V2EX);@Dian_jiao?AV98869161;@Peaksol AV99160403;@煙樓天青 AV667585557;@ty1937;@Junior T Wei(FANDOM)。
非常感謝他們以及他們的作品的支持,如果本文里有錯(cuò)誤的話還請不吝指正。拖更了這么久其實(shí)也是很想給自己騰出一些時(shí)間來靜下心寫一篇專欄(本質(zhì)是懶)。對于嗶哩礦的做法,網(wǎng)上的各種看法相當(dāng)微妙,但我并不是很關(guān)心這些想法(咸魚),我只是抱著好奇的心態(tài)想理解av號和bv號之間的關(guān)系,當(dāng)問題解決了自然就感覺到心里面豁然開朗了~~(怎么突然有點(diǎn)大學(xué)時(shí)代的那種求真味道了??)這當(dāng)然也是我寫這篇專欄的意義。

快速知道現(xiàn)BV號視頻的原本av號是多少,只需要在電腦上打開瀏覽器(谷歌、火狐瀏覽器等等),打開那個(gè)視頻在空白區(qū)域右鍵選擇獲取網(wǎng)頁源代碼,大概像這樣:

打開后只需要在最前面幾行的源代碼里找到有 href = “······”?后面就是這個(gè)視頻的原av號了?;蛟S以后這個(gè)方法會(huì)失效,但至少目前是可以用的。
密恐的小伙伴可以選擇在網(wǎng)頁欄里輸入“api.bilibili.com/x/web-interface/view?bvid=BV? ? ? ?(記得輸BV號)在代碼第二行找到"aid:av······"也可以查看視頻的原有av號。
