XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/bilibili-API-collect

添加Rust版本bvid算法

f8a8f8a
stackinspector <stackinspector@126.com>
提交于

代码差异

1 个文件 +39 -2
Modified docs/other/bvid_desc.md +39 -2
@@ -74,9 +74,9 @@
74 74
75 75 ## 编程实现
76 76
77 使用 Python、C、TypeScript、Java、Kotlin 以及 Golang 等语言作为示例,欢迎社区提交更多例程
77 使用 [Python](#Python) [C](#C) [TypeScript](#TypeScript) [Java](#Java) [Kotlin](#Kotlin) [Golang](#Golang) [Rust](#Rust) 等语言作为示例,欢迎社区提交更多例程
78 78
79 注: 新算法只提供了Python版本
79 注: 新算法只提供了 [Python](#Python) 和 [Rust](#Rust) 版本
80 80 ### Python
81 81
82 82 ```python
@@ -385,3 +385,40 @@ func main() {
385 385 BV17x411w7KC
386 386 170001
387 387 ```
388 ### Rust
389 crate: https://github.com/stackinspector/bvid
390 ```rust
391 // Copyright (c) 2023 stackinspector. MIT license.
392
393 const XORN: u64 = 177451812;
394 const ADDN: u64 = 100618342136696320;
395 const TABLE: [u8; 58] = *b"fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
396 const MAP: [usize; 10] = [9, 8, 1, 6, 2, 4, 0, 7, 3, 5];
397 const REV_TABLE: [u8; 74] = [
398 13, 12, 46, 31, 43, 18, 40, 28, 5, 0, 0, 0, 0, 0, 0, 0, 54, 20, 15, 8,
399 39, 57, 45, 36, 0, 38, 51, 42, 49, 52, 0, 53, 7, 4, 9, 50, 10, 44, 34, 6,
400 25, 1, 0, 0, 0, 0, 0, 0, 26, 29, 56, 3, 24, 0, 47, 27, 22, 41, 16, 0,
401 11, 37, 2, 35, 21, 17, 33, 30, 48, 23, 55, 32, 14, 19,
402 ];
403 const POW58: [u64; 10] = [
404 1, 58, 3364, 195112, 11316496, 656356768, 38068692544,
405 2207984167552, 128063081718016, 7427658739644928,
406 ];
407
408 pub fn av2bv(avid: u64) -> [u8; 10] {
409 let a = (avid ^ XORN) + ADDN;
410 let mut bvid = [0; 10];
411 for i in 0..10 {
412 bvid[MAP[i]] = TABLE[(a / POW58[i]) as usize % 58];
413 }
414 bvid
415 }
416
417 pub fn bv2av(bvid: [u8; 10]) -> u64 {
418 let mut a = 0;
419 for i in 0..10 {
420 a += REV_TABLE[bvid[MAP[i]] as usize - 49] as u64 * POW58[i];
421 }
422 (a - ADDN) ^ XORN
423 }
424 ```