欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

答复

答复

代码:
//不是把。。。

//刚才仔细看了看,写了一个版本的注册机,能算出注册码,但是不是很满意,有点投机呵呵

//大家将就看看,希望对你们的分析有帮助

#include <stdio.h>

#include <string.h>

#define MAX_LEN_OF_STRING 50

int main()

{

  const int MIN_LEN_OF_NAME=10;

  const int MAX_LEN_OF_NAME=24;

  char name[MAX_LEN_OF_STRING]="";

  char sn[MAX_LEN_OF_STRING]="";

  char magicString[]="i am Bin Laden";

  int lenOfName,

    lenOfMagicString,

    lastCharIndex,

    lenOfSerial;

  int i,j;

  //录入用户名,确保符合长度

  do{

    printf("Plz input your name:");

    scanf("%s", name);

    lenOfName = strlen(name);

    if(lenOfName < MIN_LEN_OF_NAME)

      printf("Name should be at least %d characters!\r\n", MIN_LEN_OF_NAME);

    else if(lenOfName > MAX_LEN_OF_NAME)

      printf("Name should no more than %d characters!\r\n", MAX_LEN_OF_NAME);

    else 

      goto goodway;

  }while(1);

goodway:

  strcat(name,magicString);

  //下面的计算保证10位的用户名对应17位的序列号

  lenOfMagicString = strlen(magicString);

  lastCharIndex = lenOfName+lenOfMagicString-3;

  for(i=0; i<26; i++)

  {//穷举得到序列号第一位

    if(((name[lastCharIndex]*(i+0x41)-i)%26)==0)

    {

      sn[0]=0x41+i;

      break;

    }

  }

  //每一位的计算都用到了第一位,然后用倒叙存储

  for(i=1,j=lastCharIndex-1; 

    j>=5;

    i++,j--)

    sn[i]=((name[j]*sn[0])%26) + 0x41;

  lenOfSerial = lastCharIndex - 5 + 1;

  sn[lenOfSerial]='\0';

  printf("The serial number is %s .\r\n", sn);

  getch();

  return 0;

}

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功