<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input placeholder="需要带上bv前缀哦" type="text" id="bv">
<button onclick="c()">获取av号</button>
<!-- <input type="text" id="av"> -->
<!-- <button onclick="c2()">获取bv号</button> -->
<script>
function _BigInt_toString()
{
return this.toStringBase(10);
}
function _BigInt_toStringBase(base)
{
var i, j, hbase;
var t;
var ds;
var c;
i = this.len;
if(i == 0)
return "0";
if(i == 1 && !this.digits[0])
return "0";
switch(base) {
default:
case 10:
j = Math.floor((2*8*i*241)/800)+2;
hbase = 10000;
break;
case 16:
j = Math.floor((2*8*i)/4)+2;
hbase = 0x10000;
break;
case 8:
j = (2*8*i)+2;
hbase = 010000;
break;
case 2:
j = (2*8*i)+2;
hbase = 020;
break;
}
t = this.clone();
ds = t.digits;
s = "";
while (i && j) {
var k = i;
var num = 0;
while (k--) {
num = (num<<16) + ds[k];
if(num < 0) num += 4294967296;
ds[k] = Math.floor(num / hbase);
num %= hbase;
}
if (ds[i-1] == 0)
i--;
k = 4;
while (k--) {
c = (num % base);
s = "0123456789abcdef".charAt(c) + s;
--j;
num = Math.floor(num / base);
if (i == 0 && num == 0) {
break;
}
}
}
i = 0;
while(i < s.length && s.charAt(i) == "0")
i++;
if(i)
s = s.substring(i, s.length);
if(!this.sign)
s = "-" + s;
return s;
}
function _BigInt_clone()
{
var x, i;
x = new BigInt(this.len, this.sign);
for(i = 0; i < this.len; i++)
x.digits[i] = this.digits[i];
return x;
}
function BigInt(len, sign)
{
var i, x, need_init;
// Setup member functions.
// Note: There is G.C. bug of function() in Netscape!
// Don't use anonymous function.
this.toString = _BigInt_toString;
this.toStringBase = _BigInt_toStringBase;
this.clone = _BigInt_clone;
if(BigInt.arguments.length == 0) {
this.sign = true;
this.len = len = 1;
this.digits = new Array(1);
need_init = true;
} else if(BigInt.arguments.length == 1) {
x = bigint_from_any(BigInt.arguments[0]);
if(x == BigInt.arguments[0])
x = x.clone();
this.sign = x.sign;
this.len = x.len;
this.digits = x.digits;
need_init = false;
} else {
this.sign = (sign ? true : false);
this.len = len;
this.digits = new Array(len);
need_init = true;
}
if(need_init) {
for(i = 0; i < len; i++)
this.digits[i] = 0;
}
}
function bigint_norm(x)
{
var len = x.len;
var ds = x.digits;
while(len-- && !ds[len])
;
x.len = ++len;
return x;
}
function bigint_from_int(n)
{
var sign, big, i;
if(n < 0) {
n = -n;
sign = false;
} else
sign = true;
n &= 0x7fffffff;
if(n <= 0xffff) {
big = new BigInt(1, 1);
big.digits[0] = n;
} else {
big = new BigInt(2, 1);
big.digits[0] = (n & 0xffff);
big.digits[1] = ((n>>16) & 0xffff);
}
return big;
}
function bigint_from_string(str, base)
{
var str_i;
var sign = true;
var c;
var len;
var z;
var zds;
var num;
var i;
var blen = 1;
str += "@"; // Terminator;
str_i = 0;
// TODO: skip white spaces
if(str.charAt(str_i) == "+") {
str_i++;
}
else if (str.charAt(str_i) == "-") {
str_i++;
sign = false;
}
if (str.charAt(str_i) == "@")
return null;
if (!base) {
if (str.charAt(str_i) == "0") {
c = str.charAt(str_i + 1);
if (c == "x" || c == "X") {
base = 16;
}
else if (c == "b" || c == "B") {
base = 2;
}
else {
base = 8;
}
}
else {
base = 10;
}
}
if (base == 8) {
while (str.charAt(str_i) == "0")
str_i++;
len = 3 * (str.length - str_i);
}
else { // base == 10, 2 or 16
if (base == 16 && str.charAt(str_i) == '0' && (str.charAt(str_i+1) == "x" || str.charAt(str_i+1) == "X")) {
str_i += 2;
}
if (base == 2 && str.charAt(str_i) == '0' && (str.charAt(str_i+1) == "b"||str.charAt(str_i+1) == "B")) {
str_i += 2;
}
while (str.charAt(str_i) == "0")
str_i++;
if (str.charAt(str_i) == "@") str_i--;
len = 4 * (str.length - str_i);
}
len = (len>>4)+1;
z = new BigInt(len, sign);
zds = z.digits;
while(true) {
c = str.charAt(str_i++);
if(c == "@")
break;
switch (c) {
case '0': c = 0; break;
case '1': c = 1; break;
case '2': c = 2; break;
case '3': c = 3; break;
case '4': c = 4; break;
case '5': c = 5; break;
case '6': c = 6; break;
case '7': c = 7; break;
case '8': c = 8; break;
case '9': c = 9; break;
case 'a': case 'A': c = 10; break;
case 'b': case 'B': c = 11; break;
case 'c': case 'C': c = 12; break;
case 'd': case 'D': c = 13; break;
case 'e': case 'E': c = 14; break;
case 'f': case 'F': c = 15; break;
default:
c = base;
break;
}
if (c >= base)
break;
i = 0;
num = c;
while(true) {
while (i<blen) {
num += zds[i]*base;
zds[i++] = (num & 0xffff);
num >>>= 16;
}
if (num) {
blen++;
continue;
}
break;
}
}
return bigint_norm(z);
}
function bigint_from_any(x)
{
if(typeof(x) == "object") {
if(x.constructor == BigInt)
return x;
return BigInt(1, 1);
}
if(typeof(x) == "string") {
return bigint_from_string(x);
}
if(typeof(x) == "number") {
var i, x1, x2, fpt, np;
if(-2147483647 <= x && x <= 2147483647) {
return bigint_from_int(x);
}
x = x + "";
i = x.indexOf("e", 0);
if(i == -1)
return bigint_from_string(x);
x1 = x.substr(0, i);
x2 = x.substr(i+2, x.length - (i+2));
fpt = x1.indexOf(".", 0);
if(fpt != -1) {
np = x1.length - (fpt+1);
x1 = x1.substr(0, fpt) + x1.substr(fpt+1, np);
x2 = parseInt(x2) - np;
} else {
x2 = parseInt(x2);
}
while(x2-- > 0) {
x1 += "0";
}
return bigint_from_string(x1);
}
return BigInt(1, 1);
}
function bigint_uminus(x)
{
var z = x.clone();
z.sign = !z.sign;
return bigint_norm(z);
}
function bigint_add_internal(x, y, sign)
{
var z;
var num;
var i, len;
sign = (sign == y.sign);
if (x.sign != sign) {
if (sign)
return bigint_sub_internal(y, x);
return bigint_sub_internal(x, y);
}
if (x.len > y.len) {
len = x.len + 1;
z = x; x = y; y = z;
} else {
len = y.len + 1;
}
z = new BigInt(len, sign);
len = x.len;
for (i = 0, num = 0; i < len; i++) {
num += x.digits[i] + y.digits[i];
z.digits[i] = (num & 0xffff);
num >>>= 16;
}
len = y.len;
while (num && i < len) {
num += y.digits[i];
z.digits[i++] = (num & 0xffff);
num >>>= 16;
}
while (i < len) {
z.digits[i] = y.digits[i];
i++;
}
z.digits[i] = (num & 0xffff);
return bigint_norm(z);
// return z;
}
function bigint_sub_internal(x, y)
{
var z = 0;
var zds;
var num;
var i;
i = x.len;
// if x is larger than y, swap
if (x.len < y.len) {
z = x; x = y; y = z; // swap x y
}
else if (x.len == y.len) {
while (i > 0) {
i--;
if (x.digits[i] > y.digits[i]) {
break;
}
if (x.digits[i] < y.digits[i]) {
z = x; x = y; y = z; // swap x y
break;
}
}
}
z = new BigInt(x.len, (z == 0) ? 1 : 0);
zds = z.digits;
for (i = 0, num = 0; i < y.len; i++) {
num += x.digits[i] - y.digits[i];
zds[i] = (num & 0xffff);
num >>>= 16;
}
while (num && i < x.len) {
num += x.digits[i];
zds[i++] = (num & 0xffff);
num >>>= 16;
}
while (i < x.len) {
zds[i] = x.digits[i];
i++;
}
return bigint_norm(z);
}
function bigint_plus(x, y)
{
x = bigint_from_any(x);
y = bigint_from_any(y);
return bigint_add_internal(x, y, 1);
}
function bigint_minus(x, y)
{
x = bigint_from_any(x);
y = bigint_from_any(y);
return bigint_add_internal(x, y, 0);
}
function bigint_mul(x, y)
{
var i, j;
var n = 0;
var z;
var zds, xds, yds;
var dd, ee;
var ylen;
x = bigint_from_any(x);
y = bigint_from_any(y);
j = x.len + y.len + 1;
z = new BigInt(j, x.sign == y.sign);
xds = x.digits;
yds = y.digits;
zds = z.digits;
ylen = y.len;
while (j--)
zds[j] = 0;
for (i = 0; i < x.len; i++) {
dd = xds[i];
if (dd == 0)
continue;
n = 0;
for (j = 0; j < ylen; j++) {
ee = n + dd * yds[j];
n = zds[i + j] + ee;
if (ee)
zds[i + j] = (n & 0xffff);
n >>>= 16;
}
if (n) {
zds[i + j] = n;
}
}
return bigint_norm(z);
}
function bigint_divmod(x, y, modulo)
{
var nx = x.len;
var ny = y.len;
var i, j;
var yy, z;
var xds, yds, zds, tds;
var t2;
var num;
var dd, q;
var ee;
var mod, div;
yds = y.digits;
if (ny == 0 && yds[0] == 0)
return null; // Division by zero
if (nx < ny || nx == ny && x.digits[nx - 1] < y.digits[ny - 1]) {
if (modulo)
return bigint_norm(x);
return BigInt(1, 1);
}
xds = x.digits;
if (ny == 1) {
dd = yds[0];
z = x.clone();
zds = z.digits;
t2 = 0;
i = nx;
while (i--) {
t2 = t2 * 65536 + zds[i];
zds[i] = (t2 / dd) & 0xffff;
t2 %= dd;
}
z.sign = (x.sign == y.sign);
if (modulo) {
if (!x.sign)
t2 = -t2;
if (x.sign != y.sign) {
t2 = t2 + yds[0] * (y.sign ? 1 : -1);
}
return bigint_from_int(t2);
}
return bigint_norm(z);
}
z = new BigInt(nx == ny ? nx + 2 : nx + 1,
x.sign == y.sign);
zds = z.digits;
if (nx == ny)
zds[nx + 1] = 0;
while (!yds[ny - 1])
ny--;
if ((dd = ((65536/(yds[ny-1]+1)) & 0xffff)) != 1) {
yy = y.clone();
tds = yy.digits;
j = 0;
num = 0;
while (j<ny) {
num += yds[j]*dd;
tds[j++] = num & 0xffff;
num >>= 16;
}
yds = tds;
j = 0;
num = 0;
while (j<nx) {
num += xds[j] * dd;
zds[j++] = num & 0xffff;
num >>= 16;
}
zds[j] = num & 0xffff;
}
else {
zds[nx] = 0;
j = nx;
while (j--) zds[j] = xds[j];
}
j = nx==ny?nx+1:nx;
do {
if (zds[j] == yds[ny-1]) q = 65535;
else q = ((zds[j]*65536 + zds[j-1])/yds[ny-1]) & 0xffff;
if (q) {
i = 0; num = 0; t2 = 0;
do { // multiply and subtract
t2 += yds[i] * q;
ee = num - (t2 & 0xffff);
num = zds[j - ny + i] + ee;
if (ee) zds[j - ny + i] = num & 0xffff;
num >>= 16;
t2 >>>= 16;
} while (++i < ny);
num += zds[j - ny + i] - t2; // borrow from high digit; don't update
while (num) { // "add back" required
i = 0; num = 0; q--;
do {
ee = num + yds[i];
num = zds[j - ny + i] + ee;
if (ee) zds[j - ny + i] = num & 0xffff;
num >>= 16;
} while (++i < ny);
num--;
}
}
zds[j] = q;
} while (--j >= ny);
if (modulo) { // just normalize remainder
mod = z.clone();
if (dd) {
zds = mod.digits;
t2 = 0; i = ny;
while (i--) {
t2 = (t2*65536) + zds[i];
zds[i] = (t2 / dd) & 0xffff;
t2 %= dd;
}
}
mod.len = ny;
mod.sign = x.sign;
if (x.sign != y.sign) {
return bigint_add_internal(mod, y, 1);
}
return bigint_norm(mod);
}
div = z.clone();
zds = div.digits;
j = (nx==ny ? nx+2 : nx+1) - ny;
for (i = 0;i < j;i++) zds[i] = zds[i+ny];
div.len = i;
return bigint_norm(div);
}
function bigint_div(x, y)
{
x = bigint_from_any(x);
y = bigint_from_any(y);
return bigint_divmod(x, y, 0);
}
function bigint_mod(x, y)
{
x = bigint_from_any(x);
y = bigint_from_any(y);
return bigint_divmod(x, y, 1);
}
function bigint_cmp(x, y)
{
var xlen;
if(x == y)
return 0; // Same object
x = bigint_from_any(x);
y = bigint_from_any(y);
xlen = x.len;
if(x.sign != y.sign) {
if(x.sign)
return 1;
return -1;
}
if (xlen < y.len)
return (x.sign) ? -1 : 1;
if (xlen > y.len)
return (x.sign) ? 1 : -1;
while(xlen-- && (x.digits[xlen] == y.digits[xlen]))
;
if (-1 == xlen)
return 0;
return (x.digits[xlen] > y.digits[xlen]) ?
(x.sign ? 1 : -1) :
(x.sign ? -1 : 1);
}
function bigint_number(x)
{
var d = 0.0;
var i = x.len;
var ds = x.digits;
while (i--) {
d = ds[i] + 65536.0 * d;
}
if (!x.sign) d = -d;
return d;
}
var table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
var tr = {}
for(i=0;i<58;i++){
tr[table[i]] = i
}
var sflag = [11, 10, 3, 8, 4, 6, 2, 9, 5, 7]
var xor = 177451812
var add = "100618342136696320"
function dec(x){
var r=0
for(i=0;i<10;i++){
// r += tr[x[sflag[i]]] * (58 ** i)
var n3=bigint_mul(tr[x[sflag[i]]],58 ** i)
r =bigint_plus(r,n3)
// console.log(r.toString())
}
return (bigint_minus(r , add)) ^ xor
}
function enc(x){
x=bigint_plus((x ^ xor),add)
// x = (x ^ xor) + add
r = ['B','V',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ']
for (i=0;i<10;i++){
r[sflag[i]] = table[((Math.floor(x / (58** i)) ) % 58)]
console.log(((Math.floor(x / (58** i)) ) % 58))
}
return r.toString().replace(/,/g, "");
}
function c(){
let value=document.getElementById("bv").value
alert(dec(value))
}
function c2(){
let value=document.getElementById("av").value
alert(enc(value))
}
console.log(enc(242572847))
</script>
</body>
</html>
Last modification:April 21, 2022
© Allow specification reprint