返回提交历史
Modified
docs/other/bvid_desc.md
+39
-2
XFEstudio/bilibili-API-collect
添加Rust版本bvid算法
f8a8f8a
代码差异
1 个文件
+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
```