因为项目中有个类似激活码的东东,然后就自己写了个。昨天去提问,然后结合自己的思想,最后成功了。只是优化还不是很理想,有时候会死循环,也没去调试看是哪几个值的问题。

我不知道windows啊vs啊以及SQL什么的是什么算法,我是取得每组值总和等于常量。

部分代码(全部代码):

public const int MAPKEYLEN = 16;
public const int REGISTKEYLEN = 25;
public static string[] MAPKETITEM =new string[36]{ "U", "F", "2", "I", "X", "S", "A", "V", "P", "M", "C", "9", "Q", "1", "G", "7", "K", "T", "B", "4", "W", "6", "H", "N", "E", "8", "Z", "O", "L", "3", "D", "0", "Y", "5", "J", "R"};public class transTool{private static int[] mapAreas = new int[] { 48, 60, 74, 90 };private static int[] registAreas = new int[] { 48,64,88,100,116 };public transTool() { }/// <summary>/// 获取键/// </summary>/// <param name="keyType">1是4组4位码,2是5组5位码。可以通通过上面的值定义</param>/// <returns></returns>public static string getKey(int keyType){string mapKey = string.Empty;string mapKeyA = "0000";string mapKeyB = "0000";string mapKeyC = "0000";string mapKeyD = "0000";string mapKeySplit = "-";mapKeyA = getKeys(0, keyType);mapKeyB = getKeys(1, keyType);mapKeyC = getKeys(2, keyType);mapKeyD = getKeys(3, keyType);mapKey = mapKeyA + mapKeySplit + mapKeyB + mapKeySplit + mapKeyC + mapKeySplit + mapKeyD;if (keyType == 2){string mapKeyE = "0000";mapKeyE = getKeys(4, keyType);mapKey += mapKeySplit + mapKeyE;}return mapKey;}private static string getKeys(int index, int keyType=1){string item = string.Empty;//当前组的值int[] areas = mapAreas; //合计域int keyItemsLen = staticStrings.MAPKEYLEN / 4;//每组长度if (keyType == 2){areas = registAreas;keyItemsLen = staticStrings.REGISTKEYLEN / 5;}if (index >= 0 && index < keyItemsLen){int preItem = 0;//前一个值int total = 0;//当前合计for (int i = 0; i < keyItemsLen; i++){int curr = getRight(areas[index], preItem, i, keyItemsLen, total);total += curr;if (curr >= staticStrings.MAPKETITEM.Length || curr <= 0 || (total >= areas[index] && i < keyItemsLen - 2)){item = getKeys(index, keyType);}else{preItem = curr;item += staticStrings.MAPKETITEM[curr];}}}else{item = "0000";}return item;}/// <summary>/// /// </summary>/// <param name="area">总和的值</param>/// <param name="preItem">前一个的值</param>/// <param name="no">当前到第几个数上了</param>/// <param name="total">当前总计</param>/// <returns></returns>private static int getRight(int area, int preItem, int no,int keyItemsLen, int total){string keys = string.Empty;int item = 0;int len = staticStrings.MAPKETITEM.Length;if (no == keyItemsLen - 1)//当获取到最后一个数时,直接总和值减去当前总和{item = area - total;}else{Random random = new Random();if (len - 1 > area - total)//当还没获取到最后一个数并且剩余可用于合计的总数比取值范围还小时,去随机剩余可用范围{item = random.Next(1, area - total);}else{item = random.Next(1, len - 1);//随机出一个常量以内的数}System.Threading.Thread.Sleep(50);}//极端情况处理//a!=area-keyItemsLen+1,因为第一个值取太大使得后三个值都是1,但这种情况在此题中不存在//b!=area-total-keyItemsLen+1,因为前两个值的和值太大使得后两个值都是1,这种情况下重新取第二个数//c!=area-total-c,虽然最后两个值不是1,但是也可能使得最后两个值相等,当知道这个值会和最后一个值相等时,抛弃此值重新取一个值if (item == preItem || (no == 0 && item == area - keyItemsLen + no + 1) || (no == 1 && item == area - total - keyItemsLen + no+1)||(no==3&&item==area-total-item))//item<=0时重新生成所有,故不在此判断{item = getRight(area, preItem, no, keyItemsLen, total);}return item;}}

生成类似激活码的代码(C#)相关推荐

  1. php生成 优惠券 激活码

    /*** 生成vip激活码* @param int $nums 生成多少个优惠码* @param array $exist_array 排除指定数组中的优惠码* @param int $code_le ...

  2. 基于Vue3实现扫码枪扫码并生成二维码的代码解析

    基于Vue3实现扫码枪扫码并生成二维码的代码解析 在本文中,我们将介绍如何使用Vue3实现扫码枪扫描条形码或二维码,并将其转换为二维码的过程.这个过程将涉及到以下步骤: 在Vue3项目中安装和导入vu ...

  3. UUID生成唯一激活码

    // 使用UUID生成激活码UUID uuid = UUID.randomUUID();String activeCode = uuid.toString().replace("-" ...

  4. python qrcode库生成二维码的代码

    如下内容内容是关于python qrcode库生成二维码的内容,希望能对各位有所用. import qrcode img = qrcode.make('Some data here')高级用法impo ...

  5. iOS 生成二维码 原生代码

    - (void)viewDidLoad { [super viewDidLoad]; [self stringToQRcode]; } -(void)stringToQRcode { // 1.实例化 ...

  6. qrcode 生成二维码的代码

    <?php /*** 关于员工的信息处理* @author anyuan*/ namespace app\recruitcard\service;use app\common\base\serv ...

  7. 商业软件的注册码激活码的实现方法及代码示例(收藏备用)

    总第51篇 本文主要梳理一下软件注册码的实现方法,并给出简单的实现方式代码,供以后的项目参考,也方便在以后的项目中进一步延伸实现. 1.注册码的实现方式 目前大部分商业软件在提供注册码时,基本上采用了 ...

  8. php 生成8位数唯一的激活码

    /** *生成激活码 */ function showGenerationActivationCode(){ #渠道类型id $channel_id=$_POST['channel']; #根据渠道i ...

  9. 如何设计和生成游戏的激活码

    游戏的激活码,也叫作奖励码.兑换码,通常是由字符和数字组成的字符串,用于在游戏的推广阶段发放给玩家,玩家在下载登录游戏之后兑换获得相应的奖励. 首先设计我们激活码的规则 字符 + 数字 组成 长度待定 ...

最新文章

  1. Javascript中的\r\n
  2. ubuntu系统安装的MySql数据库,远程不能访问的几种可能问题
  3. ArcGIS 空间查询一例
  4. Codeforces 1291 Round #616 (Div. 2) B
  5. 推荐算法--其他信息(07)
  6. oracle 中 start tran,The value (30) of MAXTRANS parameter ignored
  7. python解析格式文件
  8. WEB前端使用SheetJS读写excel文件
  9. 计算机管理-共享打印,打印机局域网共享怎么设置?最简单稳定的方法:一键共享...
  10. 动量梯度下降(Momentum、指数加权平均)、逐参数适应学习率方法(Adagrad、RMSprop、Adam)、学习率退火、归一化/标准化
  11. java获取本机ip地址和tomcat端口号
  12. java中不可变对象(immutable object)是什么,有什么意义
  13. 叹20年奶茶江湖纷争,入局奶茶行业仍有机会
  14. 密码学笔记——维吉尼亚密码
  15. Codeforces 1593C Save More Mice
  16. 大数据的应用场景都有哪些(医疗篇)
  17. t检验该怎么分析?如果选择哪种t检验?
  18. 【make】make常见问题
  19. 使用wireshark对grpc的helloworld抓包分析
  20. 系统安装报错:dracut-initqueue : Warning: dracut-initqueue timeout - starting timeout scripts

热门文章

  1. React PureComponent介绍与使用
  2. 对计算机硬盘进行格式化操作,如何在计算机上格式化硬盘,硬盘分区的格式化过程...
  3. 指针初始化,分配内存
  4. jQuery中下拉动画slideDown
  5. linux检查其他机器是否ip冲突
  6. 基于W5300的嵌入式以太网接口设计
  7. 大师兄影视App,上架TestFlight测试版,完美适配iOS+安卓端!
  8. 制造大数据分析软件——制造企业营销管理及分析系统
  9. python特殊方法和特殊属性
  10. Flask教程--第一个Flask应用:调试模式