AV/BV号转换
table='fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'
tr={}
for i in range(58):
    tr[table[i]]=i
s=[11,10,3,8,4,6]
xor=177451812
add=8728348608

def dec(x):
    r=0
    for i in range(6):
        r+=tr[x[s[i]]]*58**i
    return (r-add)^xor

def enc(x):
    x=(x^xor)+add
    r=list('BV1  4 1 7  ')
    for i in range(6):
        r[s[i]]=table[x//58**i%58]
    return ''.join(r)

print(dec('BV17x411w7KC'))
print(dec('BV1Q541167Qg'))
print(dec('BV1mK4y1C7Bz'))
print(enc(170001))
print(enc(455017605))
print(enc(882584971))



#include <math.h>

char table[] = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
int tr[58] = { 0 };

int s[] = { 11, 10, 3, 8, 4, 6 };
long long _xor = 177451812;
long long _add = 8728348608;

long long dec(string x)
{
for (int i = 0; i < 58; i++)
tr[(int)table[i]] = i;
long long r = 0;
for (int i = 0; i < 6; i++)
r += tr[x[s[i]]] * (long long)pow(58,i);
return (r - _add)^_xor;
}


string enc(long long x)
{
x = (x^_xor)+_add;
string r = "BV1 4 1 7 ";
for (int i = 0; i < 6; i++)
r[s[i]] = table[(int)(x / (long long)pow(58, i) % 58)];
return r;
}

TAG:none