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

XFEstudio/bilibili-API-collect

feat: bv<-->av algo implemented in golang (#1027)

Co-authored-by: wsh <3443327820@qq.com>

ce07d83
wsh <52617949+WShihan@users.noreply.github.com>
提交于

代码差异

1 个文件 +66 -0
Modified docs/misc/bvid_desc.md +66 -0
@@ -328,6 +328,71 @@ public class AVBVConverter {
328 328
329 329 ```
330 330
331
332 ### Golang
333
334 ```go
335 package main
336
337 import (
338 "fmt"
339 "strings"
340 )
341
342 var (
343 XOR_CODE = int64(23442827791579)
344 MAX_CODE = int64(2251799813685247)
345 CHARTS = "FcwAPNKTMug3GV5Lj7EJnHpWsx4tb8haYeviqBz6rkCy12mUSDQX9RdoZf"
346 PAUL_NUM = int64(58)
347 )
348
349 func swapString(s string, x, y int) string {
350 chars := []rune(s)
351 chars[x], chars[y] = chars[y], chars[x]
352 return string(chars)
353 }
354
355 func Bvid2Avid(bvid string) (avid int64) {
356 s := swapString(swapString(bvid, 3, 9), 4, 7)
357 bv1 := string([]rune(s)[3:])
358 temp := int64(0)
359 for _, c := range bv1 {
360 idx := strings.IndexRune(CHARTS, c)
361 temp = temp*PAUL_NUM + int64(idx)
362 }
363 avid = (temp & MAX_CODE) ^ XOR_CODE
364 return
365 }
366
367 func Avid2Bvid(avid int64) (bvid string) {
368 arr := [12]string{"B", "V", "1"}
369 bvIdx := len(arr) - 1
370 temp := (avid | (MAX_CODE + 1)) ^ XOR_CODE
371 for temp > 0 {
372 idx := temp % PAUL_NUM
373 arr[bvIdx] = string(CHARTS[idx])
374 temp /= PAUL_NUM
375 bvIdx--
376 }
377 raw := strings.Join(arr[:], "")
378 bvid = swapString(swapString(raw, 3, 9), 4, 7)
379 return
380 }
381
382 func main() {
383 avid := int64(1054803170)
384 bvid := "BV1mH4y1u7UA"
385 resAvid := Bvid2Avid(bvid)
386 resBvid := Avid2Bvid(avid)
387
388 fmt.Printf("convert bvid to avid: %v\tvalue:%v\n", avid == resAvid, resAvid)
389 fmt.Printf("convert avid to bvid: %v\tvalue:%v\n", bvid == resBvid, resBvid)
390
391 }
392
393 ```
394
395
331 396 ### C++
332 397 ```c++
333 398 #include <algorithm>
@@ -387,6 +452,7 @@ int main() {
387 452 ```
388 453
389 454
455
390 456 ## 老版算法存档
391 457
392 458 **以下算法已失效**,编解码函数值域有限,不推荐使用,在此仅作为存档