哔哩哔哩视频aid和bvid互转_bilibili

本文介绍了如何使用Java实现Bilibili平台上的AID和BVID之间的转换,包括旧版和新版ID的兼容处理,以及提供了一个示例代码来演示两种格式之间的互转过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、aid和bvid是什么?

aid:https://www.bilibili.com/video/av1301648659/中的1301648659。
bvid:https://www.bilibili.com/video/BV1uu4m1g7Ej/中的BV1uu4m1g7Ej。
打开后可以发现,这两个链接指向的是同一个b站视频。

二、java实现

1.代码如下(示例):

public static void main(String[] args) throws Exception {
    	
    	System.out.println(av2bv(1301648659));
    	System.out.println(bv2av("BV1uu4m1g7Ej"));
	}
    
    private static final String table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF";
    private static final int[] s = {11, 10, 3, 8, 4, 6, 2, 9, 5, 7};
    private static final int xor = 177451812;

    //8728348608L 100618342136696320L
    //105开头id转换:1051277039;
    private static final long add_105 = 8728348608L;
    
    private static final long add_all = 8728348608L - Integer.MAX_VALUE - 1;

    private static int[] tr = new int[128];

    static {
        for (int i = 0; i < 58; i++) {
            tr[table.charAt(i)] = i;
        }
    }

    public static long bv2av(String x) {
    	long r = 0;
        for (int i = 0; i < 6; i++) {
            r += tr[x.charAt(s[i])] * (long) Math.pow(58, i);
        }
        long add = add_105;
        if(r < add){
        	add = add_all;
        }
        long avid = ((r - add) ^ xor);
        return avid;
    }

    public static String av2bv(long x) {
    	long add = add_105;
    	if(x > 1060000000){
    		add = add_all;
        }
        x = (x ^ xor) +  add;
        
        char[] r = {'B', 'V', '1', ' ', ' ', '4', ' ', '1', ' ', '7', ' ', ' '};
        for (int i = 0; i < 6; i++) {
            r[s[i]] = table.charAt((int)(x / (long) Math.pow(58, i) % 58));
        }
        return new String(r);
    }

2.执行

BV1uu4m1g7Ej
1301648659

互转成功。


后语

网上有老版aid与bvid互转的实现,但是已不支持新版本转换,现在加入兼容代码,同时支持新老版本id互转。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值