1. 程式人生 > >Linux中生成隨機數的

Linux中生成隨機數的

生成隨機數的方法有7種

1.通過時間獲取隨機數

1)date +%s (隨機生成10位數字)
       用於獲得時間戳。

       如果用它做隨機數,相同一秒的資料是一樣的。在做迴圈處理,多執行緒裡面基本不能滿足要求了。
在這裡插入圖片描述
2)date +%N (隨機生成9位數字)

       獲得當前時間的納秒資料,精確到億分之一秒。

       這個相當精確了,就算在多cpu,大量迴圈裡面,同一秒裡面,同一秒裡面,也很難出現相同結果,不過不同時間裡面還會有大量重複碰撞
在這裡插入圖片描述
       額外擴充套件:date +%s%N (隨機生成19位數字)
在這裡插入圖片描述

2.通過系統環境變數($RANDOM)

        echo $RANDOM (隨機生成5位數字)(範圍0~32767)
在這裡插入圖片描述

       echo “$RANDOM”|md5sum|cut -c 5-14(隨機生成10個字元的字串)
在這裡插入圖片描述

3.通過系統內部唯一資料生成隨機數(/dev/urandom)

       head /dev/urandom|cksum (9位,4位,如果用cat或more則虛擬機器會自動開啟印表機,cksum是用來解決亂碼的)。

       cksum 將讀取檔案內容,生成唯一的表示整型資料,只有檔案內容不變,生成結果就不會變化,與php crc函式。
在這裡插入圖片描述

4.通過opensssl產生隨機數

       rand -base64 10(表示10位字串)。
在這裡插入圖片描述
       只有當位數為3的倍數時,後面才會沒有等號。

5.通過UUID生成隨機數

       cat /proc/sys/kernel/random/uuid 或 uuidgen。

       UUID碼全稱是通用唯一識別碼(Universally Unique Identifier,UUID)它是一個軟體建構的標準,亦為自由軟體基金會的組織在分散式計算環境領域的一部分;

       UUID的目的是讓分散式系統中的所有元素都能有唯一的辨別資訊,而不需要通過中央控制端來做辨別資訊的指定,如此一來,每個人都可以建立不與其他人發生衝突的UUID,在這種情況下,就不需要考慮資料庫建立時的名稱重複問題了,它會讓網路中任何一臺計算機所生成的UUID碼都是網際網路整個伺服器網路中唯一的編碼。它的原資訊會加入硬體、時間、機器當期那執行資訊等。
在這裡插入圖片描述


       指定長度:uuidgen|md5sum|cut -c 2-10(8位長的字串)

6.mkpaswd

       mkpasswd(預設產生9位的字串,其中數字固定位2位,特殊字元固定位1位,其餘都是字母)。
在這裡插入圖片描述
       相關引數:
       -l (length of password,        default = 9) :指定密碼長度;
       -d (min # of digits, default = 2) :指定密碼中數字的數量;
       -c (min # of lowercase chars, default = 2) :指定密碼中小寫字母的數量;
       -C (min # of uppercase chars, default = 2) :指定密碼中大寫字母的數量;
       -s (min # of special chars, default = 1) :指定密碼中特殊字元的數量;
       -p prog (program to set password, default = /bin/passwd) :程式設定密碼,預設是passwd;

7.mktemp

       /tmp/tmp.**********(10位長的字串)。
       這是一個比較特殊的隨機數,它有指定的目錄/tmp。
在這裡插入圖片描述
       如果在建立檔案時引用此命令,那麼它會自動在/tmp目錄下產生檔案。
在這裡插入圖片描述