在设计程序时候,经常涉及到随机序列/随机数的生成。犹记得初学C语言的时候,一个人称“小马哥”的同学让我替他写一个生成随机数的小程序段,那时对这些一无所知,走了不少弯路才整出来。近日,又接触到类似的东西。整理如下,以便查询。
一、随机数
借助C提供的函数库。以下代码功能:生成N位纯数字密码
#include<stdio.h>
#include<stdlib.h>
#include <time.h> /*包含的头文件*/
void function(int n) /*生成N位的随机纯数字密码*/
{
int i;
printf("产生的");
printf("%d",n);
printf("位随机密码为: ");
for(i=0;i<n;i++)
printf("%d",rand()%10);
printf("\n");
}
int main(void)
{
int num;
srand( (unsigned)time( NULL ) ); /*保证每次生成的随机数不相同*/
printf("请输入你想得到密码的位数:\n");
scanf("%d",&num);
function(num);
return 0;
}
二、Guid 值
它是通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,GUID 广泛应用于微软的产品中,用于标识如注册表项、类及接口标识、数据库、系统目录等对象。它具有以下几个优点:
★GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
★世界上的任何两台计算机都不会生成重复的 GUID 值。
★需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
★GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。
C++代码如下:
#include<iostream>
#include<objbase.h>/*头文件*/
using namespace std;
const char* newGUID()
{//--生成GUID
static char buf[64] = {0};
GUID guid;
if (S_OK == ::CoCreateGuid(&guid))
{
_snprintf(buf, sizeof(buf)
, "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}"
, guid.Data1
, guid.Data2
, guid.Data3
, guid.Data4[0], guid.Data4[1], guid.Data4[2]
, guid.Data4[3], guid.Data4[4], guid.Data4[5]
, guid.Data4[6], guid.Data4[7]
);
}
return (const char*)buf;
}
int main(int argc, char* argv[])
{
CoInitialize(NULL);
cout<<newGUID()<<endl;
CoUninitialize();
system("pause");
return 0;
}