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