在設計程序時候,經常涉及到隨機序列/隨機數的生成。猶記得初學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;
}