序列号生成-模拟windows office序列号
最近看到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序列号相关推荐
- 使用Redis实现高并发分布式序列号生成服务
序列号的构成 为建立良好的数据治理方案,作数据掌握.分析.统计.商业智能等用途,业务数据的编码制定通常都会遵循一定的规则,一般来讲,都会有自己的编码规则和自增序列构成.比如我们常见的身份证号.银行卡号 ...
- php源代码序列号,php如何生成不重复的序列号
php如何生成不重复的序列号 发布时间:2021-03-03 09:38:37 来源:亿速云 阅读:92 作者:清风 这篇"php如何生成不重复的序列号"除了程序员外大部分人都不太 ...
- 关于流水帐表序列号生成时的并发操作问题
关于流水帐表序列号生成时的并发操作问题 1.某些流水张表的序号不是而是带有一定规则的, 如:四位的年份+2位周数+7位数字的序号 2007130000002. 假定表的定义如下: ...
- .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用
原文:.NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了 ...
- mac序列号生成主板号_如何查找Mac的序列号(即使您没有Mac也是如此)
mac序列号生成主板号 Your Mac's serial number is a unique identifier that distinguishes your Mac from all oth ...
- 字母序列号生成 A...Z..AA..ZZ....
A-Z-AA-ZZ- 字母序列生成与转换 代码: 'use strict';/*** A...Z..AA..ZZ.. 序列号生成与转换*/ class VersionTool {/*** constr ...
- oracle快速生成序列号,Oracle实现自定义序列号生成
实际工作中,难免会遇到序列号生成问题,下面就是一个简单的序列号生成函数 (1)创建自定义序列号配置表如下: --自定义序列 create table S_AUTOCODE ( pk1 ...
- 手动生成MyEclipse注册码及序列号(源代码)
本文转自: 手动生成MyEclipse注册码及序列号http://visionsky.blog.51cto.com/733317/340855 好多朋友在找myeclipse的注册码,下面介绍种 ...
- php打包序列号,php怎么生成不重复的序列号
php生成不重复的序列号的方法:1.通过"str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);"方式生成不重复的序列号:2.通过imp ...
- 如何批量生成16进制序列号
很多用户平时在使用条码软件,不单单是打印条码,也会打印一些序列号.像我们通常用到的序列号0.1.--.8.9这种是十进制,而16进制是在十进制数字的基础上添加A~F六个大写英文字母,序列号是" ...
最新文章
- James Fee’s 5 Predictions Geo for 2010 and 5 Things That Won’t Happen
- 微信小程序-设置启动页面
- TCP-IP详解:快速重传与快速恢复
- 剩余 大小 查看内存_计算机内存管理介绍
- Quartz框架中的Scheduler
- 微服务架构何去何从?
- centos的mysql命令,Centos系统mysql相关命令
- 国家特级数学教授李毓佩:我们欠孩子真正的数学阅读 !
- 7-34 点赞 (20 分)
- Java 重写(Override)与重载(Overload)区别
- 笔记:MapReduce Design Patterns
- vbs计算机病毒代码,vbs病毒的简单例子源代码解析
- excel 根据两点经纬度计算距离
- 台式计算机cpu多高,台式机硬件正常温度是多少
- 如何使用GoldWave中文版进行声道分离?
- 【饭谈】职业生涯的关键:不破不立
- vue中如何实现列表的详情页获取及渲染
- svg基础--基本语法与标签
- python venv pip使用国内源
- U8g2库的详细使用