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在线获取“某专业起名”程序注册码

发表回复

本站承接,网站推广(SEM,SEO);软件安装与调试;服务器或网络推荐及配置;APP开发与维护;网站开发修改及维护; 各财务软件安装调试及注册服务(金蝶,用友,管家婆,速达,星宇等);同时也有客户管理系统,人力资源,超市POS,医药管理等;

立即查看 了解详情