JAVA在線獲取“某專業起名”程序注冊碼
[重要通告]如您遇疑難雜癥,本站支持知識付費業務,掃右邊二維碼加博主微信,可節省您寶貴時間哦!
最近大家都在玩某起名家的東西,都快玩壞了,各種玩的語言都有,可是大家這么玩,早晚會玩壞的~~~
Java (OpenJDK 13.0.1)JAVA在線獲取“某專業起名”程序注冊碼
注冊碼長度15位,1-4位+9-12位為機器碼轉換信息,5、6位授權年份信息,7、8位授權月份信息,13、14位授權日信息,第15位1或2固定;且年<=2030年,月:1-12,日:1-28,授權的時間信息比較簡單;
import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; public class Main { public static void main(String[] args) { // 機器碼 String pcCode = "30071-29574-62920-20730"; // 有效時長 2029-12-28 超過這個的 不一定能注冊成哈 String regDate = "20291228"; String text = pcCode.replace("-", ""); if (text.length() > 10) { text = text.substring(0, 10) + text.substring(text.length() - 5); } String regCode = m4(md5(m12(text)).toUpperCase()); // 年份yyyy 后2位對應注冊碼 5-6位 // 6,7,B=>1 對應1幾年 8,9,C=>2 對應2幾年 String[] year3 = {"8", "9", "C"}; // 年份第四位對照關系 String[] year41 = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; String[] year42 = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"}; // 月份MM 對應注冊碼7-8位 // 月份第一位, 6,7,B=>1 對應1 4,5,A=>0 對應0 月份第二位對照關系同年份第四位對照關系 String[] month10 = {"4", "5", "A"}; String[] month11 = {"6", "7", "B"}; // 日dd對應注冊碼13,14位 // 日dd第一位A,B,C=> 0,1,2 第二位0-8不用對應直接用 Random rd = new Random(); int i = rd.nextInt(3); // Random value between 0 and 2 (inclusive) // 注冊碼 String y3 = regDate.substring(2, 3); // 年第三位 String y4 = regDate.substring(3, 4); // 年第四位 String m1 = regDate.substring(4, 5); // 月第一位 String m2 = regDate.substring(5, 6); // 月第二位 String d1 = regDate.substring(6, 7); // 日第一位 String d2 = regDate.substring(7, 8); // 日第二位 String[] month = month10; if ("1".equals(m1)) month = month11; // 注冊碼拼接 String zccode = regCode.substring(0, 4) + year3[i] + year42[findIndex(year41, y4)] + month[i] + year42[findIndex(year41, m2)] + regCode.substring(4, 8) + year42[findIndex(year41, d1)] + d2 + "2"; // 固定1或2均可 System.out.println(zccode); } static int findIndex(String[] array, String value) { for (int index = 0; index < array.length; index++) { if (array[index].equals(value)) { return index; } } throw new IllegalArgumentException("Value not found in array: " + value); } static String m12(String string_7) { int length = string_7.length(); long num = 0L; if (length > 0) { for (int i = 0; i < length; i++) { int num3 = (int) string_7.charAt(i); int num4 = num3 + 7; int num5 = num3 * 5; num += smethod_8(num3, num4, num5); num += smethod_9(num3, num4, num5); num += smethod_10(num3, num4, num5); num *= smethod_11(num3, num4, num5) + 12L; if (num > 100000000L) { num = Long.parseLong(Long.toString(num).substring(Math.max(0, Long.toString(num).length() - 7))); } } String text = Long.toString(num); if (text.length() >= 6) { return text.substring(text.length() - 6); } else { return Long.toString(num + 523109L).substring(Math.max(0, Long.toString(num + 523109L).length() - 6)); } } return ""; } static String m4(String string_7) { String text2 = ""; String text3 = ""; // 構建 text2 text2 = string_7.substring(10, 12) + string_7.substring(0, 2) + string_7.substring(14, 16) + string_7.substring(21, 23) + string_7.substring(6, 8) + string_7.substring(4, 6); // 處理 text2 for (int num = 1; num <= 12; num++) { String charAtIndex = text2.substring(num - 1, num); if (isNumeric(charAtIndex)) { int numValue = Integer.parseInt(charAtIndex); text3 += Integer.toString(numValue ^ 5); } else { char charValue = (char) (charAtIndex.charAt(0) + 20 - num); String text4 = Character.toString(charValue); if (text4.equals("O")) { text3 += "0"; } else { text3 += text4; } } } // 替換 "0" 為 "7" text3 = text3.replace("0", "7"); // 重新排列 text3 String result = text3.substring(8, 10) + text3.substring(4, 6) + text3.substring(10, 12) + text3.substring(6, 8); return result; } static boolean isNumeric(String str) { return str.matches("\\d"); } static int smethod_8(int int_0, int int_1, int int_2) { return (int_0 << 2) | (int_1 & int_2); } static int smethod_9(int int_0, int int_1, int int_2) { return int_0 & int_2 & ((int_1 << 3) | int_2); } static int smethod_10(int int_0, int int_1, int int_2) { return (int_0 & (int_2 << 2)) | ((int_1 << 3) & int_2); } static int smethod_11(int int_0, int int_1, int int_2) { return (int_0 << 4) & (int_2 << 2) & ((int_1 << 2) | int_2); } public static String md5(String input) { try { // 創建MD5算法實例 MessageDigest md = MessageDigest.getInstance("MD5"); // 計算MD5哈希值 byte[] messageDigest = md.digest(input.getBytes()); // 將字節數組轉換為16進制表示的字符串 StringBuilder hexString = new StringBuilder(); for (byte b : messageDigest) { String hex = Integer.toHexString(0xff & b); if (hex.length() == 1) hexString.append('0'); hexString.append(hex); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } }
玩一玩:https://www.bejson.com/runcode/java/
問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信
所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!
賞
支付寶贊助
微信贊助
免責聲明,若由于商用引起版權糾紛,一切責任均由使用者承擔。
您必須遵守我們的協議,如您下載該資源,行為將被視為對《免責聲明》全部內容的認可->聯系老梁投訴資源 LaoLiang.Net部分資源來自互聯網收集,僅供用于學習和交流,請勿用于商業用途。如有侵權、不妥之處,請聯系站長并出示版權證明以便刪除。
敬請諒解! 侵權刪帖/違法舉報/投稿等事物聯系郵箱:service@laoliang.net
意在交流學習,歡迎贊賞評論,如有謬誤,請聯系指正;轉載請注明出處: » JAVA在線獲取“某專業起名”程序注冊碼