admin 管理员组文章数量: 887021
2023年12月16日发(作者:xor校验)
程序有一个参数,表示生成的密码的长度
运行的时候要加上,比如./password 8
我写的很简单,参数没做检查,你应该自己去完善一下。
#include
#include
#include
void generate(int len,char* buffer)
{
/*产生密码用的字符串*/
static
int i = 0;
for(; i < len; i++)
{
buffer[i] = string[rand()%strlen(string)]; /*产生随机数*/
}
}
int main(int argc, char* argv[])
{
int len = atoi(argv[1]); /*指定生成的密码长度*/
srand(time(0)); /*设定随机数种子*/
char *buffer = (char*)malloc(len + 1); /*分配内存*/
generate(len,buffer); /*生成密码*/
puts(buffer); /*输出到屏幕*/
FILE* fp = fopen("pass","w"); /*打开输出文件*/
if(fp == NULL)
return -1;
fwrite(buffer, sizeof(char), len, fp); /*写文件*/
fclose(fp); /*关闭文件*/
free(buffer); /*释放动态分配的内存*/
return 0; /*程序结束*/
}
自己可以写一个函数。
IT生活系列群:
50337593 IT-live(软件开发)
计算机软件技术群,技术是相通的,大家取长补短,共同进步吧!--软件不仅仅是一种思想。他是一门艺术
30633141 IT-live(网站建设)
const char string[]=
"abcdefghiljklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
网虫们的天地。大家要努力把我们的家园建得更好。Asp、Php、Jsp、
50337724 IT-live(心理就诊)
工作生活中 难免会有不开心、不痛快地事 我们有专业的心理医师 有热心的IT朋友们,让大家帮助你解除困惑。让你开心每一天!
50337649 IT-live(项目外包)
证明你的实力,实现你的目标。80%的能力+100%的努力=成功!!!!!!!
3431641 IT-live(招聘求职)
面包很重要。有了它,才能走遍天下!
1949892 it_live(美工设计)
再好的软件。没有好的界面是不行的。
欢迎IT爱好者的加入。
愿我们在这共同的群体中,找到自己想要的生活!! !!
我记得好象是rand函数吧,可以生成随机数,至于具体的位数,是有参数选择的
这是完整的你只要进去改改数字就可以生成8位的了:希望对你有用!
using System;
using ;
using uration;
using tions;
using ;
using ty;
using ;
using trols;
using ts;
using ntrols;
using g;
using g;
using ;
public partial class UserControls_Gif :
{
protected void Page_Load(object sender, EventArgs e)
{
string tmp = RndNum(5).ToUpper();
n["ImageV"] = tmp;
HttpCookie a = new HttpCookie("ImageV", tmp);
(a);
CheckCodeImage(tmp);
}
private void ValidateCode(string VNum)
{
Bitmap Img = null;
Graphics g = null;
MemoryStream ms = null;
int gheight = * 15;
Img = new Bitmap(gheight, 30);
g = age(Img);
//背景颜色
();
//文字字体
Font f = new Font("Arial Black", 11);
//文字颜色
SolidBrush s = new SolidBrush();
ring(VNum, f, s, 3, 3);
ms = new MemoryStream();
(ms, );
ontent();
tType = "image/Jpeg";
Write(y());
e();
e();
();
}
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" +
",q,r,s,t,u,v,w,x,y,z";
string[] VcArray = (new Char[] { ',' });
string VNum = "";
int temp = -1;
Random rand = new Random();
for (int i = 1; i < VcodeNum + 1; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)));
}
int t = (35);
if (temp != -1 && temp == t)
{
return RndNum(VcodeNum);
}
temp = t;
VNum += VcArray[t];
}
return VNum;
}
private void CreateCheckCodeImage(string checkCode)
{
if(checkCode == null || () == )
return;
image = new ((int)g(( *
15.5)), 30);
Graphics g = age(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
();
//画图片的背景噪音线
for(int i=0; i<25; i++)
{
int x1 = ();
int x2 = ();
int y1 = ();
int y2 = ();
ne(new Pen(), x1, y1, x2, y2);
}
Font font = new ("Arial", 14, (
=
|
));
GradientBrush
, d, 1.2f, true);
ring(checkCode, font, brush, 2, 2);
//画图片的前景噪音点
for(int i=0; i<100; i++)
{
int x = ();
int y = ();
el(x, y, gb(()));
}
//画图片的边框线
ctangle(new Pen(), 0, 0, - 1, - 1);
Stream ms = new Stream();
(ms, );
ontent();
tType = "image/Gif";
Write(y());
}
finally
{
e();
e();
}
}
}
#include
#include
#include
main()
{
brush new
GradientBrush(new Rectangle(0, 0, , ),
srand(time(0));
int a=rand()%900000+100000;
printf("随机数%d",a);
}
#include
#include
#include
int main()
{
srand( time(NULL) );
int a= rand()%900000 + 100000*(rand()%9+1);
printf("随机数%dn",a);
return 0;
}
C语言下没有真正的随机函数,如果用srand与rand配合产生随机数,每个数之间的间隔需要在1秒钟以上.
下面是我写的一个用来随机产生7-9位QQ邮箱的源代码,原理是先用随机函数产生一个<10的整数(这个数是所生成QQ号码的位数),然后判断这个数是否在7~9之间,如果满足要求,下面将一位一位地产生每一位数字,最后与"@"连接,生成一个QQ邮箱,并写入文件.
VC++6.0下编译通过
函数produceQQMail()用来产生随机数的代码:
#include
#include
#include
#include
#define MAX_ADDRESS 1000
char directory[20];
DWORD writeFile(const char*filename,char*str)
{
FILE *fp;
fp=fopen(filename,"a+");
if(fp==NULL)
{
puts("Cannot open this file!");
return -1;
}
fprintf(fp,"%sn",str);
fflush(fp);
//fputs(str,fp);
return 1;
}
DWORD produceQQMail() //→→→→→产生QQ邮箱函数
{
unsigned int i,count;
char zj[20];
char compare[20];
unsigned long relative;
for(count=1;count<=MAX_ADDRESS;count++)
{
Sleep(600);
srand((unsigned)time(0));
while(1)
{
relative=1+(int)(10.0*rand()/(RAND_MAX+1.0));//产生QQ号码的位数
if(relative<7||relative>9)
continue;//判断是否满足所需要的位数
Sleep(100);
for(i=0;i { itoa(1+(int)(10.0*rand()/(RAND_MAX+1.0)),&zj[i],10);//生成每一位数字,将其转换为字符型,并保存在数组中 } zj[i]='0'; strcat(zj,"@");//连接生成邮箱 if(count>1&&strcmp(compare,zj)==0) //比较前后两者以防出现相同的邮箱 continue; strcpy(compare,zj); if(writeFile(directory,zj)==1) { printf("===>生成第%d个QQ邮箱n",count); //system("cls"); break; } } } return 1; } void main() { puts("=>请输入您要保存到的文件名及其目录"); scanf("%s",directory); puts("=>Now producing QQ mail addresses……"); produceQQMail(); } 随机数是怎么产生出来的呢? 可以利用C语言中的种子函数srand( )和伪随机函数rand( )来实现。 ① 首先,给srand(m )提供一个“种子”m,它的取值范围是从0~65535。 ② 然后,调用rand( ),是伪随机数,它会根据提供给srand( )的“种子”值返回一个随机数(在0~32767之间)。 ③ 根据需要多次调用rand( ),从而不断地得到新的随机数。 ④ 无论何时,你都可以给srand( )提供一个新的“种子”,从而进一步“随机化”rand( )的输出结果。 例如,取m=17,则执行了srand(17)之后,再执行rand( )函数,将得到输出值94;第二次调用rand( ),会得到26,……反复调用rand( )就能产生一系列的随机数。 注意:若m不变,则rand( )的输出系列也不变,总是94,26,602,……等等。所以,建议摇号的“种子”选为当前日期或时间,以保证每天的摇号值都不相同。 一个简单的参考程序 彩票选号器 已调试成功的选号器源程序如下,遗憾的是只有伪随机数字发生器,种子(1-65536)不变则数字不变。因此建议以月日作为种子数(如7月27日则输入727) #include #include typedef struct liuyu{int data;struct liuyu*link;}test; liuyu *p,*q,*r,*head; int L; /*元素的个数*/ int m=sizeof(test); void build(); /*生成数字循环链表*/ void display(); /*输出链表*/ /*---------------------------------------------------------*/ void build() /*数字循环链表的生成*/ {int i; head=(test*)malloc(m); /*m=sizeof(test);*/ p=head; for(i=1;i {p->data=i; p->link=(test*)malloc(m); /*m=sizeof(test));*/ p=p->link; } p->data=i; p->link=head; } /*---------------------------------------------------------*/ void display() /*数字循环链表的输出*/ {p=head; while (p->link!=head) {printf("%3d",p->data); p=p->link; } printf("%3dn",p->data); } /*---------------------------------------------------------*/ void main(void) /* 输出福彩1-36个数字中的7个随机号码*/ { L=36; int n,i,j; build(); printf("random number="); scanf("%d",&n); srand(n); p=head; for(j=1;j<=7;j++) {n=rand(); for(i=1;i<=n;i++) {q=p; /* 删除元素X,注意保存X的前趋元素指针! */ p=p->link;} printf("%d",p->data); q->link=p->link; } /*---------------------------------------------------------*/ L=10; /* 马上接着运行体彩10中选7程序 */ build(); printf("nrandom number2="); scanf("%d",&n); srand(n); printf("nn"); p=head; for(j=1;j<=7;j++) {n=rand(); for(i=1;i<=n;i++)p=p->link; if(p->data==10)p->data=0; printf("%d",p->data); } } 4位数字是没有重复的吧 #include #include #include void rnd4(int b[]) { int a[10]; for(int i=0;i<10;i++) { a[i]=i; } int m=10; for(i=0;i<4;i++) { //生成1到m的随机数rn int rn=rand()%m; b[i]=a[rn]; m--; //把a[rn]放到数组a的末端 int temp=a[m]; a[m]=a[rn]; a[rn]=temp; } } void main() { srand(time(0)); int b[4]; rnd4(b); } //b即是你要的数组 看看得不得: #include "stdio.h" #include "math.h" #define N 3 /*根据你的需要而定*/ void main() { int a[N]; int j; for(j=0;j for(;;) { a[j]=rand(); if(a[j]>=1000&&a[j]<10000) break; } for(j=0;j printf("a[%d]=%dn",j,a[j]); }
版权声明:本文标题:C语言生成随机函数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702736876h428684.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论