最近看到office2013在提示过期问题(升级win10后遗症),就想到模拟下office的激活码。~~

起初想到应该简单,最后越试越复杂。所以就记录下,毕竟花费了时间。

package test;import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class SerialNum {//随机器,随机次数和符号等。private static Random r = new Random();//定义一些数字取值范围过滤,避免数字字母看起来混淆的问题,还有,避免暴力全遍历的问题。private static List<Integer> numFilter = new ArrayList<>();//定义一些字符取值范围过滤private static List<Integer> charFilter = new ArrayList<>();//初始化static {numFilter.add(0);numFilter.add(1);numFilter.add(5);charFilter.add(97);// acharFilter.add(65);charFilter.add(101);// echarFilter.add(69);charFilter.add(105);// icharFilter.add(73);charFilter.add(108);// lcharFilter.add(76);charFilter.add(111);// ocharFilter.add(79);charFilter.add(115);// scharFilter.add(83);charFilter.add(117);// ucharFilter.add(85);charFilter.add(122);// zcharFilter.add(90);}//main函数,批量生成多组public static void main(String[] args) {int i = 0;while (i < 10) {outSerialNum(5,5);i++;}}//获取一组序列,入参为序列有几组,每组长度为几private static void outSerialNum(int group,int len) {long start = System.currentTimeMillis();StringBuilder s = new StringBuilder();// 以随机串的分组数量为单位,获取每组的串for (int i = 0; i < group; i++) {// 传入每组串的长度s.append(getRandomStr(len) + "-");}System.out.println(s.toString().substring(0, s.length()-1));System.out.println("cost:" + (System.currentTimeMillis() - start));}// 获取一组长度为n的随机数字字母串private static String getRandomStr(int len) {StringBuilder sb = new StringBuilder();String[] unit = new String[len];// 随机出数字和字母出现的次数,保证数字和字母至少出现一次int numCount = r.nextInt(len);if (numCount == 0) {numCount = 1;}int charCount = len - numCount;// System.out.println("numCount=" + numCount + "; charCount=" +// charCount);// 获取二者中出现次数多的类型,优先随机插入数组int max = numCount;int flag = 0;// 表示数字类型if (charCount > numCount) {max = charCount;flag = 1;// 字母}// 优先随机位置插入出现次数多的类型for (int i = 0; i < max; i++) {int f = r.nextInt(len);if (flag == 0) {unit[f] = String.valueOf(getNum());} else {unit[f] = String.valueOf(getChar());}}// System.out.println("优先插入次数多的类型后:" + getArrayString(unit));// 遍历数组,如果不为空,加入已经存在的字符串;为空,字符串填充另一种类型for (String s : unit) {if (null == s) {// 与第一次插入采用相反的类型if (flag == 0) {sb.append(String.valueOf(getChar()));} else {sb.append(String.valueOf(getNum()));}} else {sb.append(s);}}return sb.toString();}private static int getNum() {int n = r.nextInt(10);return numFilter.contains(n) ? getNum() : n;// 不能在数字过滤器中}private static char getChar() {int c = r.nextInt(26) + 97;// 不能在字符过滤器中return charFilter.contains(c) ? getChar() : (char) c;}}

序列号生成-模拟windows office序列号相关推荐

  1. 使用Redis实现高并发分布式序列号生成服务

    序列号的构成 为建立良好的数据治理方案,作数据掌握.分析.统计.商业智能等用途,业务数据的编码制定通常都会遵循一定的规则,一般来讲,都会有自己的编码规则和自增序列构成.比如我们常见的身份证号.银行卡号 ...

  2. php源代码序列号,php如何生成不重复的序列号

    php如何生成不重复的序列号 发布时间:2021-03-03 09:38:37 来源:亿速云 阅读:92 作者:清风 这篇"php如何生成不重复的序列号"除了程序员外大部分人都不太 ...

  3. 关于流水帐表序列号生成时的并发操作问题

    关于流水帐表序列号生成时的并发操作问题 1.某些流水张表的序号不是而是带有一定规则的,   如:四位的年份+2位周数+7位数字的序号       2007130000002.   假定表的定义如下: ...

  4. .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用

    原文:.NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了 ...

  5. mac序列号生成主板号_如何查找Mac的序列号(即使您没有Mac也是如此)

    mac序列号生成主板号 Your Mac's serial number is a unique identifier that distinguishes your Mac from all oth ...

  6. 字母序列号生成 A...Z..AA..ZZ....

    A-Z-AA-ZZ- 字母序列生成与转换 代码: 'use strict';/*** A...Z..AA..ZZ.. 序列号生成与转换*/ class VersionTool {/*** constr ...

  7. oracle快速生成序列号,Oracle实现自定义序列号生成

    实际工作中,难免会遇到序列号生成问题,下面就是一个简单的序列号生成函数 (1)创建自定义序列号配置表如下: --自定义序列 create table S_AUTOCODE ( pk1          ...

  8. 手动生成MyEclipse注册码及序列号(源代码)

    本文转自:  手动生成MyEclipse注册码及序列号http://visionsky.blog.51cto.com/733317/340855 好多朋友在找myeclipse的注册码,下面介绍种 ...

  9. php打包序列号,php怎么生成不重复的序列号

    php生成不重复的序列号的方法:1.通过"str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);"方式生成不重复的序列号:2.通过imp ...

  10. 如何批量生成16进制序列号

    很多用户平时在使用条码软件,不单单是打印条码,也会打印一些序列号.像我们通常用到的序列号0.1.--.8.9这种是十进制,而16进制是在十进制数字的基础上添加A~F六个大写英文字母,序列号是" ...

最新文章

  1. James Fee’s 5 Predictions Geo for 2010 and 5 Things That Won’t Happen
  2. 微信小程序-设置启动页面
  3. TCP-IP详解:快速重传与快速恢复
  4. 剩余 大小 查看内存_计算机内存管理介绍
  5. Quartz框架中的Scheduler
  6. 微服务架构何去何从?
  7. centos的mysql命令,Centos系统mysql相关命令
  8. 国家特级数学教授李毓佩:我们欠孩子真正的数学阅读 !
  9. 7-34 点赞 (20 分)
  10. Java 重写(Override)与重载(Overload)区别
  11. 笔记:MapReduce Design Patterns
  12. vbs计算机病毒代码,vbs病毒的简单例子源代码解析
  13. excel 根据两点经纬度计算距离
  14. 台式计算机cpu多高,台式机硬件正常温度是多少
  15. 如何使用GoldWave中文版进行声道分离?
  16. 【饭谈】职业生涯的关键:不破不立
  17. vue中如何实现列表的详情页获取及渲染
  18. svg基础--基本语法与标签
  19. python venv pip使用国内源
  20. U8g2库的详细使用

热门文章

  1. qtxlsx读写 excel
  2. ddwrt open*** tun
  3. 肠道细菌产生的神经递质调节宿主的感觉行为
  4. 一文详解 implementation api embed
  5. 不入世的天才: 尼古拉·特斯拉
  6. 【统计】回归系数与相关系数的联系与区别
  7. 完善智慧办公建设,小熊U租获京东数千万元A+轮融资
  8. UML之教学管理系统——4、Rational Rose画活动图
  9. 新的计算机的wifi连接无线网络连接,如何设置电脑优先连接无线WIFI网络
  10. layui 列表 模板