JAVA在線獲取“某專業(yè)起名”程序注冊碼

[重要通告]如您遇疑難雜癥,本站支持知識付費業(yè)務,掃右邊二維碼加博主微信,可節(jié)省您寶貴時間哦!

最近大家都在玩某起名家的東西,都快玩壞了,各種玩的語言都有,可是大家這么玩,早晚會玩壞的~~~

Java (OpenJDK 13.0.1)JAVA在線獲取“某專業(yè)起名”程序注冊碼

注冊碼長度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 {
            // 創(chuàng)建MD5算法實例
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 計算MD5哈希值
            byte[] messageDigest = md.digest(input.getBytes());

            // 將字節(jié)數組轉換為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號又微信號)右上方掃一掃可加博主微信

所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!

支付寶贊助
微信贊助

免責聲明,若由于商用引起版權糾紛,一切責任均由使用者承擔。

您必須遵守我們的協(xié)議,如您下載該資源,行為將被視為對《免責聲明》全部內容的認可->聯(lián)系老梁投訴資源
LaoLiang.Net部分資源來自互聯(lián)網收集,僅供用于學習和交流,請勿用于商業(yè)用途。如有侵權、不妥之處,請聯(lián)系站長并出示版權證明以便刪除。 敬請諒解! 侵權刪帖/違法舉報/投稿等事物聯(lián)系郵箱:service@laoliang.net
意在交流學習,歡迎贊賞評論,如有謬誤,請聯(lián)系指正;轉載請注明出處: » JAVA在線獲取“某專業(yè)起名”程序注冊碼

發(fā)表回復

本站承接,網站推廣(SEM,SEO);軟件安裝與調試;服務器或網絡推薦及配置;APP開發(fā)與維護;網站開發(fā)修改及維護; 各財務軟件安裝調試及注冊服務(金蝶,用友,管家婆,速達,星宇等);同時也有客戶管理系統(tǒng),人力資源,超市POS,醫(yī)藥管理等;

立即查看 了解詳情