關於隨機數

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章