diff --git a/lib/pages/search/controller.dart b/lib/pages/search/controller.dart index 7c6e49768..7e4e07724 100644 --- a/lib/pages/search/controller.dart +++ b/lib/pages/search/controller.dart @@ -5,6 +5,7 @@ import 'package:hive/hive.dart'; import 'package:pilipala/http/search.dart'; import 'package:pilipala/models/search/hot.dart'; import 'package:pilipala/models/search/suggest.dart'; +import 'package:pilipala/utils/id_utils.dart'; import 'package:pilipala/utils/storage.dart'; class SearchController extends GetxController { diff --git a/lib/utils/id_utils.dart b/lib/utils/id_utils.dart new file mode 100644 index 000000000..cc9c4a03e --- /dev/null +++ b/lib/utils/id_utils.dart @@ -0,0 +1,47 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +class IdUtils { + static const String TABLE = + 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'; + static const List S = [11, 10, 3, 8, 4, 6]; // 位置编码表 + static const int XOR = 177451812; // 固定异或值 + static const int ADD = 8728348608; // 固定加法值 + static const List r = [ + 'B', + 'V', + '1', + '', + '', + '4', + '', + '1', + '', + '7', + '', + '' + ]; + + /// av转bv + static String av2bv(int av) { + int x_ = (av ^ XOR) + ADD; + List newR = []; + newR.addAll(r); + for (int i = 0; i < S.length; i++) { + newR[S[i]] = + TABLE.characters.elementAt((x_ / pow(58, i).toInt() % 58).toInt()); + } + return newR.join(); + } + + /// bv转bv + static int bv2av(String bv) { + int r = 0; + for (int i = 0; i < S.length; i++) { + r += (TABLE.indexOf(bv.characters.elementAt(S[i])).toInt()) * + pow(58, i).toInt(); + } + return (r - ADD) ^ XOR; + } +}