Rumah pembangunan bahagian belakang tutorial php Nombor rawak PHP C nombor rawak dilanjutkan

Nombor rawak PHP C nombor rawak dilanjutkan

May 07, 2016 pm 02:34 PM
php nombor rawak

本篇文章给大家介绍一下PHP 随机数  C扩展随机数。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

Nombor rawak PHP C nombor rawak dilanjutkan

由于要用到固定长度的随机字符串。

首先是一段PHP代码

1

2

3

4

5

6

7

8

    $str_md5=md5(uniqid());

$rand = mt_rand(1, 28);

$str1=substr($str_md5,$rand,6);

$rand = mt_rand(1, 28);

$str2=substr($str_md5,$rand,6);

$rand = mt_rand(1, 28);

$str3=substr($str_md5,$rand,6);

$code=substr($str1.$str2.$str3,0,8);

Salin selepas log masuk

Nombor rawak PHP C nombor rawak dilanjutkan

生成180000个随机字符串,图中是按照重复数量倒序排列,可以看到基本都有重复的。不过也是比较理想的。

由于想提升一下自己的C语言能力,所以用C重新写了一下随机生成字符串。

其中用到了随机数函数srand(),rand();

不过折腾一两个小时,随机数还是有问题。并发访问时时间可能几乎为同时,那么srand给的种子时间可以视为相同的。这样就导致了,产生的随机数也是一样的。从而产生的随机字符串也是一样的。循环输出随机字符串,几乎都是一模一样的。

后来想到了ukey,这个扩展可以实现唯一的ID,那么访问都产生唯一的ID,是不是可以将这个ID作为种子时间。答案是肯定的。

Nombor rawak PHP C nombor rawak dilanjutkan

上图是产生的随机字符串,可以自定义长度。也同样可以输出只有数字的字符串。相较PHP所产生的随机字符串重复率更低且速度更快。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

PHP_FUNCTION(get_random__num_str)

{

     int length=8;

      

     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE)

     {

        length=8;

         

     }

     length++;

    int flag, i; 

    char* string; 

    __uint64_t timestamp = realtime();

    __uint64_t retval;

    int len;

    char buf[128];

 

    if (timestamp == 0ULL) {

        RETURN_FALSE;

    }

 

    spin_lock(lock, pid);

 

    if (context->last_timestamp == timestamp) {

        context->sequence = (context->sequence + 1) & context->sequence_mask;

        if (context->sequence == 0) {

            timestamp = skip_next_millis();

        }

 

    } else {

        context->sequence = 0; /* Back to zero */

    }

 

    context->last_timestamp = timestamp;

 

    retval = ((timestamp - context->twepoch) << context->timestamp_left_shift)

           | (context->datacenter_id << context->datacenter_id_shift)

           | (worker_id << context->worker_id_shift)

           | context->sequence;

 

    spin_unlock(lock, pid);

    //printf(&#39;%ld&#39;,retval);

    srand((unsigned)retval);

    //srand((unsigned) time(NULL )); 

    if ((string = (char*) emalloc(length)) == NULL ) 

    

        //myLog("Malloc failed!flag:14\n"); 

        RETURN_NULL() ; 

    

   

    for (i = 0; i < length - 1; i++) 

    

        flag = rand() % 3; 

         

        switch (flag) 

        

            case 0: 

                string[i] = &#39;1&#39; + rand() % 5; 

                break

            case 1: 

                string[i] = &#39;2&#39; + rand() % 7; 

                break

            case 2: 

                string[i] = &#39;0&#39; + rand() % 10; 

                break

            default

                string[i] = &#39;9&#39;; 

                break

        }

         

         

          

    

    string[length - 1] = &#39;\0&#39;; 

    RETURN_STRINGL(string,length,0);

}

 PHP_FUNCTION(get_random_str)

{

     int length=8;

      

     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &length) == FAILURE)

     {

        length=8;

         

     }

     length++;

    int flag, i; 

    char* string; 

    __uint64_t timestamp = realtime();

    __uint64_t retval;

    int len;

    char buf[128];

 

    if (timestamp == 0ULL) {

        RETURN_FALSE;

    }

 

    spin_lock(lock, pid);

 

    if (context->last_timestamp == timestamp) {

        context->sequence = (context->sequence + 1) & context->sequence_mask;

        if (context->sequence == 0) {

            timestamp = skip_next_millis();

        }

 

    } else {

        context->sequence = 0; /* Back to zero */

    }

 

    context->last_timestamp = timestamp;

 

    retval = ((timestamp - context->twepoch) << context->timestamp_left_shift)

           | (context->datacenter_id << context->datacenter_id_shift)

           | (worker_id << context->worker_id_shift)

           | context->sequence;

 

    spin_unlock(lock, pid);

    //printf(&#39;%ld&#39;,retval);

    srand((unsigned)retval);

    //srand((unsigned) time(NULL )); 

    if ((string = (char*) emalloc(length)) == NULL ) 

    

        //myLog("Malloc failed!flag:14\n"); 

        RETURN_NULL() ; 

    

   

    for (i = 0; i < length - 1; i++) 

    

        flag = rand() % 3; 

         

        switch (flag) 

        

            case 0: 

                string[i] = &#39;A&#39; + rand() % 26; 

                break

            case 1: 

                string[i] = &#39;a&#39; + rand() % 26; 

                break

            case 2: 

                string[i] = &#39;0&#39; + rand() % 10; 

                break

            default

                string[i] = &#39;x&#39;; 

                break

        }

         

         

          

    

    string[length - 1] = &#39;\0&#39;; 

    RETURN_STRINGL(string,length,0);

}

Salin selepas log masuk

Nombor rawak PHP C nombor rawak dilanjutkan

上图是PHP生成18W随机字符串所用的时间

Nombor rawak PHP C nombor rawak dilanjutkan

上图是C扩展生成18W随机字符串所用的时间

所用的服务器都是1G内存 双核的阿里云服务器。

只要在ukey中加入上如代码就可以生产随机字符串和随机长度数字字符串

ukey的地址http://www.oschina.net/p/ukey

推荐学习:《PHP视频教程

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP ialah rangka kerja MVC sumber terbuka. Ia menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP mempunyai beberapa perpustakaan untuk mengurangkan beban tugas yang paling biasa.

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

See all articles