關(guān)于BV轉(zhuǎn)換AV算法研究
今天 Bilibili 把以前 av
+ 數(shù)字的稿件地址格式更換為 BV
+ 字母數(shù)字的格式 ,類似 Youtube 的稿件編碼方式:【升級公告】AV號全面升級至BV號
但是比方說以前只需要記住簡單的一些數(shù)字就很方便,現(xiàn)在需要記住必將長的數(shù)字與字母組合,這樣就比較麻煩(其實可能是因為剛開始有些不習慣),所以希望依舊記住原來的AV號,這樣可以方便一些,參考網(wǎng)上的討論的算法(好像大家習慣用python討論),也實現(xiàn)一個具體算法來實現(xiàn)BV到AV的轉(zhuǎn)換。
思路:
根據(jù)各種消息,可以判斷應(yīng)該是Base58 編碼,設(shè) x 是一個指定的 av 號,查詢 58k+x, 58^2k+x, 58^3k+x, 58^4k+x (k∈Z), 這些 av 號對應(yīng)的 bv 號,發(fā)現(xiàn) bv 號的第 12、11、4、9、5 位分別會變化。所以猜測這些是 58 進制下的相應(yīng)位。但是不可能直接是 base58,應(yīng)該是異或一個大數(shù),base58 的字符表打亂之后得到的結(jié)果,所以“異或”就是產(chǎn)生二進制紋理的根本原因。
根據(jù)知乎的以為朋友的數(shù)據(jù)看出https://www.zhihu.com/question/381784377/answer/1099438784從這里能看出,那里不變的“1”、“411”、“7”并不是永久不變的,只不過它們對應(yīng)的很高的數(shù)位,在目前B站av號存量來看,不足以讓它們產(chǎn)生變化。其中“目前最高位”的第5位扎堆的那幾個字符,在58進制轉(zhuǎn)換表里大概也是扎堆的——大概在中后的位置。

僅文章作學習研究使用,歡迎一起討論算法。
