🏠 Home 

BV号⇆AV号

B站BV号与AV号互转脚本库

สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @require https://update.greasyfork.org/scripts/398808/785053/BV%E5%8F%B7%E2%87%86AV%E5%8F%B7.js

// @name BV号⇆AV号
// @description B站BV号与AV号互转脚本库
// @language zh-CN
const table = [...'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'];
const s = [11, 10, 3, 8, 4, 6];
const xor = 177451812;
const add = 8728348608;
const bv2av = bv=>{
let str = '';
if (bv.length === 12) {
str = bv;
} else if (bv.length === 10) {
str = `BV${bv}`;
// 根据官方 API,BV 号开头的 BV1 其实可以省略
// 不过单独省略个 B 又不行(
} else if (bv.length === 9) {
str = `BV1${bv}`;
} else {
return '¿你在想桃子?';
};
if (!str.match(/[Bb][Vv][fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF]{10}/gu)) {
return '¿你在想桃子?';
};
let r###lt = 0;
let i = 0;
while (i < 6) {
r###lt += table.indexOf(str[s[i]]) * 58 ** i;
i += 1;
};
return `av${r###lt - add ^ xor}`;
};
const av2bv = av=>{
let num = NaN;
if (Object.prototype.toString.call(av) === '[object Number]') {
num = av;
} else if (Object.prototype.toString.call(av) === '[object String]') {
num = parseInt(av.replace(/[^0-9]/gu, ''));
};
if (isNaN(num) || num <= 0) {
// 网页版直接输出这个结果了
return '¿你在想桃子?';
};
num = (num ^ xor) + add;
let r###lt = [...'bv1  4 1 7  '];
let i = 0;
while (i < 6) {
r###lt[s[i]] = table[Math.floor(num / 58 ** i) % 58];
i += 1;
};
return r###lt.join('');
};