PHP uniqid()

Jmnote (토론 | 기여)님의 2021년 10월 5일 (화) 04:04 판 (→‎참고)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
  다른 뜻에 대해서는 함수 uniqid() 문서를 참조하십시오.

1 개요[ | ]

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

2 생성일시 확인[ | ]

PHP
Copy
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
Loading

3 직접 제작[ | ]

  • uniqid()와 동일한 기능을 가지는 uniqid2()를 만들어 보았다.
  • 내장 함수 uniqid()가 있으므로 uniqid2()를 실제로 사용할 일은 없겠지만, 작동원리를 이해할 수 있다.
PHP
Copy
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";
Loading

4 같이 보기[ | ]

5 참고[ | ]

  1. 단, 완벽하게(100%) 유일함을 보장하지는 않지만, 실무적으로 중복이 있을 확률은 0%라고 봐도 무방하다.
  • PHP 파일 다운로드 구현 2 (한글 파일명 지원)
    제가 파일다운로드 관련된 것이 서툴러서 파일 다운로드 부분을 인용하였습니다. 죄송합니다.
  • PHP에서 오라클 DB 사용
    감사합니당. YoWu
  • PHP 파일 업로드 구현
    파일정보 출력에서 $name $ext 가 정상적으로 출력되나요? 전부 echo의 쌍따옴표안에 있는데? 일리단사오육칠
  • PHP 파일 업로드 구현
    PHP echo에서 쌍따옴표 안의 변수는 해석되어 출력됩니다. 위 소스에서도 $name와 $ext가 두껍게 나와있죠? 일반 문자열과는 다르다는 표시죠.J Jmnote
  • PHP 파일 다운로드 구현 2 (한글 파일명 지원)
    'Windows NT 6.1' << 이부분은 접속한 윈도우의 플랫폼을 뜻하는걸로 압니다. ie11 접속하면 다음과 같이 바뀌었고 Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko rv:11.0 << 이부분이 Anmkst
  • Lib my.php
    Fatal error: Uncaught Error: Call to undefined function insert_rows() in D:\xampp\htdocs\naru\import_excel.php:38 Stack trace: #0 {main} thrown in D:\xampp\htdo 신정섭
  • Lib my.php
    함수 query()를 사용하면 됩니다. 예시 추가했으니 참고바랍니다.J Jmnote
  • 로또번호 생성
    초보를 위한 개발 실습 과제로군요 ㅎㅎ Pinkcrimson