哔哩哔哩 BV、AV互转 C#版

Edie ·
更新时间:2024-11-15
· 569 次阅读

哔哩哔哩 BV、AV互转 C#版

从JAVA移植的(从python移植的B站AV号BV号互转算法源码)//套娃

引用@ty1937

https://blog.csdn.net/ty1937/article/details/105080093?

在这里插入图片描述

private static string table = "fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF"; private static Dictionary b2aDic = new Dictionary(); private static Dictionary a2bDic = new Dictionary(); static int[] ss = { 11, 10, 3, 8, 4, 6, 2, 9, 5, 7 }; static Int64 xor = 177451812; static Int64 add = 8728348608L; /// /// 泡我(依赖性) /// /// 英文字母的第一个字母 /// 英文字母的第二个字幕 /// 想要的结果(废话) public static long Power(int a, int b) { Int64 power = 1; for (int i = 0; i < b; i++) { power *= a; } return power; } /// /// BV号转av号 /// /// 带有BV前缀的编号 /// 带有小写av前缀的编号 public static string BV2AV(string str) { try { str = str.Trim(); b2aDic.Clear(); Int64 r = 0; for (int i = 0; i < 58; i++) { string s1 = table.Substring(i, 1); b2aDic.Add(s1, i); } for (int i = 0; i < 6; i++) { r = r + b2aDic[str.Substring(ss[i], 1)] * Power(58, i); } return "av" + ((r - add) ^ xor); } catch (Exception ex) { //MessageBox.Show(ex.ToString()); return "Error"; throw; } } /// /// av号转BV号 /// /// 带有小写av前缀的编号 /// 带有大写BV前缀的编号 public static string AV2BV(string str) { try { str = str.Trim(); a2bDic.Clear(); string[] strs = { "av" }; string[] sss = (str.Split(strs, StringSplitOptions.RemoveEmptyEntries)); Int64 s = Convert.ToInt64(sss[0]); StringBuilder sb = new StringBuilder("BV1 4 1 7 "); s = (s ^ xor) + add; for (int i = 0; i < 58; i++) { string s1 = table.Substring(i, 1); a2bDic.Add(i, s1); } for (int i = 0; i < 6; i++) { string r = a2bDic[(s / Power(58, i) % 58)]; int index = Convert.ToInt32(ss[i].ToString()); for (int j = 0; j < sb.Length; j++) { sb[index] = r.ToCharArray()[0]; } } return sb.ToString(); } catch (Exception ex) { //MessageBox.Show(ex.ToString()); return "Error"; throw; } }

花了点时间从python移植过来的JAVA移植过来的(套娃)。
java的substring和replace和C#的重载略不同
两个方法依赖Power方法,此为静态工具类在这里插入图片描述


作者:tong2108



bv C#

需要 登录 后方可回复, 如果你还没有账号请 注册新账号