回答編集履歴

6

誤植修正

2017/12/12 02:42

投稿

退会済みユーザー
test CHANGED
@@ -112,7 +112,7 @@
112
112
 
113
113
 
114
114
 
115
- [int old(string $string)](http://php.net/manual/ja/function.ord.php)
115
+ [int ord(string $string)](http://php.net/manual/ja/function.ord.php)
116
116
 
117
117
 
118
118
 

5

補足の…以下略

2017/12/12 02:42

投稿

退会済みユーザー
test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- ※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
139
+ ※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されていて、それが得られるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
140
140
 
141
141
  ```
142
142
 

4

補足の補足の補足の位置修正

2017/12/12 01:23

投稿

退会済みユーザー
test CHANGED
@@ -100,6 +100,42 @@
100
100
 
101
101
 
102
102
 
103
+ で、ここではランダムなバイト文字列を生成しただけなので、使用して良い文字とかは全く考慮されていないです。
104
+
105
+
106
+
107
+ ですから、最初に定義してある$chars配列の要素をこのランダムさを利用して必要文字数分だけ取り出そう、というわけです。
108
+
109
+
110
+
111
+ $bytesは長さ$lengthのバイト文字列だったので、for文を使って$bytesの最初の文字から最後の文字までを1つずつ取り出し、ord()します。
112
+
113
+
114
+
115
+ [int old(string $string)](http://php.net/manual/ja/function.ord.php)
116
+
117
+
118
+
119
+ $stringで渡された文字列の最初の1文字目のASCIIコードを**整数で**返す関数です。
120
+
121
+
122
+
123
+ > ordで先頭を指定する必要はないのではないのでしょうか?
124
+
125
+
126
+
127
+ についてですが、ここでord()を使っている意図は先頭を取り出すことにあるのではなく、**ランダムな整数** を得る事にあります。
128
+
129
+
130
+
131
+ > 取り出された要素は一つしかない以上、その要素は必ず先頭になるので
132
+
133
+
134
+
135
+ についてですが、ord()に渡しているのは$bytesではなく **$bytes[$i]** つまり文字列ではなくバイト文字1文字であって、for()ループの毎に、0文字目から最後の文字まで1文字ずつ変わっていくわけです。
136
+
137
+
138
+
103
139
  ※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
104
140
 
105
141
  ```
@@ -130,42 +166,6 @@
130
166
 
131
167
 
132
168
 
133
- で、ここではランダムなバイト文字列を生成しただけなので、使用して良い文字とかは全く考慮されていないです。
134
-
135
-
136
-
137
- ですから、最初に定義してある$chars配列の要素をこのランダムさを利用して必要文字数分だけ取り出そう、というわけです。
138
-
139
-
140
-
141
- $bytesは長さ$lengthのバイト文字列だったので、for文を使って$bytesの最初の文字から最後の文字までを1つずつ取り出し、ord()します。
142
-
143
-
144
-
145
- [int old(string $string)](http://php.net/manual/ja/function.ord.php)
146
-
147
-
148
-
149
- $stringで渡された文字列の最初の1文字目のASCIIコードを**整数で**返す関数です。
150
-
151
-
152
-
153
- > ordで先頭を指定する必要はないのではないのでしょうか?
154
-
155
-
156
-
157
- についてですが、ここでord()を使っている意図は先頭を取り出すことにあるのではなく、**ランダムな整数** を得る事にあります。
158
-
159
-
160
-
161
- > 取り出された要素は一つしかない以上、その要素は必ず先頭になるので
162
-
163
-
164
-
165
- についてですが、ord()に渡しているのは$bytesではなく **$bytes[$i]** つまり文字列ではなくバイト文字1文字であって、for()ループの毎に、0文字目から最後の文字まで1文字ずつ変わっていくわけです。
166
-
167
-
168
-
169
169
  さて、これで、ランダムな整数が取得できました。それがこの太字の部分です。
170
170
 
171
171
 

3

補足の補足の補足

2017/12/12 01:21

投稿

退会済みユーザー
test CHANGED
@@ -100,7 +100,7 @@
100
100
 
101
101
 
102
102
 
103
- ※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。
103
+ ※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。バイト文字なので、0から255までのランダムな数字になります。
104
104
 
105
105
  ```
106
106
 

2

補足の補足

2017/12/12 01:19

投稿

退会済みユーザー
test CHANGED
@@ -100,6 +100,36 @@
100
100
 
101
101
 
102
102
 
103
+ ※コマンドラインでこんな事を数回繰り返してみると、ランダムな数字が10個生成されるのがわかります。
104
+
105
+ ```
106
+
107
+ # php -r "$bytes = openssl_random_pseudo_bytes(10); for($i=0; $i < strlen($bytes); $i++){ echo ord($bytes[$i]) . \"\n\"; }"
108
+
109
+ 130
110
+
111
+ 160
112
+
113
+ 69
114
+
115
+ 116
116
+
117
+ 180
118
+
119
+ 250
120
+
121
+ 89
122
+
123
+ 198
124
+
125
+ 21
126
+
127
+ 248
128
+
129
+ ```
130
+
131
+
132
+
103
133
  で、ここではランダムなバイト文字列を生成しただけなので、使用して良い文字とかは全く考慮されていないです。
104
134
 
105
135
 

1

補足

2017/12/12 01:17

投稿

退会済みユーザー
test CHANGED
@@ -27,6 +27,42 @@
27
27
  ```PHP
28
28
 
29
29
  echo generateSecureRandomString(15, 'abcde_!#$@') . '</p>';
30
+
31
+ ```
32
+
33
+
34
+
35
+ 結果はこんなんになっています。
36
+
37
+
38
+
39
+ ```PHP
40
+
41
+ Array
42
+
43
+ (
44
+
45
+ [0] => a
46
+
47
+ [1] => b
48
+
49
+ [2] => c
50
+
51
+ [3] => d
52
+
53
+ [4] => e
54
+
55
+ [5] => _
56
+
57
+ [6] => !
58
+
59
+ [7] => #
60
+
61
+ [8] => $
62
+
63
+ [9] => @
64
+
65
+ )
30
66
 
31
67
  ```
32
68
 
@@ -154,4 +190,4 @@
154
190
 
155
191
 
156
192
 
157
- パターンに空文字列( **//** )を指定しているので、結果は、文字が1文字ごとにバラバラにされた配列として得られます。
193
+ パターンに空文字列( **//** )を指定しているので特定の文字・パターンに関係なく区切られ、結果は、文字が1文字ごとにバラバラにされた配列として得られます。