"PHP uniqid()"의 두 판 사이의 차이

 
(사용자 3명의 중간 판 37개는 보이지 않습니다)
1번째 줄: 1번째 줄:
{{다른뜻|함수 uniqid()}}
==개요==
==개요==
;PHP uniqid()
;PHP uniqid()
* 유니크 ID를 생성하는 PHP 함수<ref>단, 완벽하게(100%) 유일함을 보장하지는 않음</ref>
* 유니크 ID를 생성하는 PHP 함수<ref>단, 완벽하게(100%) 유일함을 보장하지는 않지만, 실무적으로 중복이 있을 확률은 0%라고 봐도 무방하다.</ref>
* 기본은 16진수 13자리
* 기본은 16진수 13자리
:2번째 인수로 true를 넣으면 16진수 23자리가
:앞 8자리는 초단위까지, 뒤 5자리는 마이크로초단위를 16진수로 바꾼 것이다.
* 실상은 [[PHP microtime()|microtime()]]값을 변형한 것임
* 2번째 인수로 true를 넣으면 16진수 23자리가 된다.
:그렇기 때문에 반복생성해보면 앞부분은 잘 바뀌지 않음
* 실상은 마이크로초 단위의 유닉스 타임스탬프( [[PHP microtime()|microtime()]] ) 값을 변형한 것이다.
* 매개변수를 넣으면 접두어로 붙음
:그렇기 때문에 반복생성해보면 앞부분이 잘 바뀌지 않는다.
* 매개변수를 넣으면 접두어로 붙는다.


<source lang='php'>
<syntaxhighlight lang='php' run>
echo uniqid();
echo uniqid(); # 4b3403665fea6 (예시)
# 4b3403665fea6
</syntaxhighlight>
</source>
<syntaxhighlight lang='php' run>
<source lang='php'>
echo uniqid('hello_'); # hello_56fdc64b3ea94 (예시)
echo uniqid('hello_');
</syntaxhighlight>
# hello_56fdc64b3ea94
<syntaxhighlight lang='php' run>
</source>
echo uniqid()."\n";
echo uniqid()."\n";
echo uniqid()."\n";
</syntaxhighlight>


==생성일시 확인==
==생성일시 확인==
<source lang='php'>
<syntaxhighlight lang='php' run>
function uniqid2datetime($uniqid) {
function uniqid2datetime($uniqid) {
  return date("Y-m-d H:i:s",hexdec(substr($uniqid,0,8)));
return date('Y-m-d H:i:s',hexdec(substr($uniqid,0,8)));
}
}
echo uniqid2datetime('4b3403665fea6');
# 2009-12-25 09:12:22
</source>


==커스텀==
echo uniqid2datetime('5ebe03859ec4b') . "\n"; # 2020-05-15 02:50:45
echo uniqid2datetime('5ebe03859fbe2') . "\n"; # 2020-05-15 02:50:45
</syntaxhighlight>
 
==직접 제작==
* uniqid()와 동일한 기능을 가지는 uniqid2()를 만들어 보았다.
* uniqid()와 동일한 기능을 가지는 uniqid2()를 만들어 보았다.
* 내장 함수 uniqid()가 있으므로 uniqid2()를 실제로 사용할 일은 없겠지만, 작동원리를 이해할 수 있다.
* 내장 함수 uniqid()가 있으므로 uniqid2()를 실제로 사용할 일은 없겠지만, 작동원리를 이해할 수 있다.
<source lang='php'>
 
<syntaxhighlight lang='php' run>
function uniqid2() {
function uniqid2() {
list($u, $s) = explode(" ", microtime());
list($u, $s) = explode(' ', microtime());
return dechex($s).dechex(substr($u,2,6));
return dechex($s).substr(dechex(substr($u,2,6)),0,8);
}
for($i=0; $i<2; $i++) {
echo 'origin: ' . uniqid() . PHP_EOL;
echo 'custom: ' . uniqid2() . PHP_EOL;
}
}
# origin: 58ed8b4ec676b
echo 'origin: ' . uniqid()  . "\n";
# custom: 58ed8b4ec6795
echo 'custom: ' . uniqid2() . "\n";
# origin: 58ed8b4ec67f2
echo 'origin: ' . uniqid()  . "\n";
# custom: 58ed8b4ec67fa
echo 'custom: ' . uniqid2() . "\n";
</source>
</syntaxhighlight>


==같이 보기==
==같이 보기==
*[[PHP microtime()]]
* [[PHP microtime()]]
*[[PHP openssl_random_pseudo_bytes()]]
* [[PHP openssl_random_pseudo_bytes()]]
*[[PHP Misc. 함수]]
* [[PHP Misc. 함수]]
*[[함수 uuidgen()]]
* [[함수 uniqid()]]
* [[함수 uuidgen()]]


==참고 자료==
==참고==
* http://php.net/manual/kr/function.uniqid.php
* https://www.php.net/manual/en/function.uniqid.php


[[분류: PHP]]
[[분류: PHP]]
[[분류: 식별자]]
[[분류: 타임스탬프]]
[[분류: unique]]

2021년 10월 5일 (화) 04:04 기준 최신판

  다른 뜻에 대해서는 함수 uniqid() 문서를 참조하십시오.

1 개요[ | ]

PHP uniqid()
  • 유니크 ID를 생성하는 PHP 함수[1]
  • 기본은 16진수 13자리
앞 8자리는 초단위까지, 뒤 5자리는 마이크로초단위를 16진수로 바꾼 것이다.
  • 2번째 인수로 true를 넣으면 16진수 23자리가 된다.
  • 실상은 마이크로초 단위의 유닉스 타임스탬프( microtime() ) 값을 변형한 것이다.
그렇기 때문에 반복생성해보면 앞부분이 잘 바뀌지 않는다.
  • 매개변수를 넣으면 접두어로 붙는다.
echo uniqid(); # 4b3403665fea6 (예시)
echo uniqid('hello_'); # hello_56fdc64b3ea94 (예시)
echo uniqid()."\n";
echo uniqid()."\n";
echo uniqid()."\n";

2 생성일시 확인[ | ]

function uniqid2datetime($uniqid) {
	return date('Y-m-d H:i:s',hexdec(substr($uniqid,0,8)));
}

echo uniqid2datetime('5ebe03859ec4b') . "\n"; # 2020-05-15 02:50:45
echo uniqid2datetime('5ebe03859fbe2') . "\n"; # 2020-05-15 02:50:45

3 직접 제작[ | ]

  • uniqid()와 동일한 기능을 가지는 uniqid2()를 만들어 보았다.
  • 내장 함수 uniqid()가 있으므로 uniqid2()를 실제로 사용할 일은 없겠지만, 작동원리를 이해할 수 있다.
function uniqid2() {
	list($u, $s) = explode(' ', microtime());
	return dechex($s).substr(dechex(substr($u,2,6)),0,8);
}
echo 'origin: ' . uniqid()  . "\n";
echo 'custom: ' . uniqid2() . "\n";
echo 'origin: ' . uniqid()  . "\n";
echo 'custom: ' . uniqid2() . "\n";

4 같이 보기[ | ]

5 참고[ | ]

  1. 단, 완벽하게(100%) 유일함을 보장하지는 않지만, 실무적으로 중복이 있을 확률은 0%라고 봐도 무방하다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}