PHP&JS UUID 얻기
2 (수정 )
PHP
function uuidv4(){
// /proc/sys.... 리눅스 전용 명령어다.
// PHP 서버는 리눅스를 쓰는 것이 거의 표준이기 때문에 일단 이것을 우선으로 사용.
$uuid = @file_get_contents('/proc/sys/kernel/random/uuid');
if ($uuid){
$uuid = trim($uuid);
} else {
// /proc/sys/kernel/random/uuid 가 작동을 안 할 시 fallback 사용.
// 윈도우를 쓸 때라든지...
$data = random_bytes(16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
$uuid = vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
return $uuid;
}
Javascript 레거시 브라우저 지원 필요시:
function uuidv4(){
if (self?.crypto?.randomUUID) {
// 크롬 2021년 버전, 파이어폭스 2021년 버전 이상의 브라우저
return crypto.randomUUID();
} else {
// 구형 브라우저, 2021년 이전의 브라우저
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
}
Javascript 최신 브라우저만 지원할 경우:
function uuidv4(){
return crypto.randomUUID();
}
구형 브라우저일 경우, 구형 지원에 머리 싸매지 말고 최신 브라우저 업데이트를 유도하는 창을 따로 띄우는 게 리소스도 덜 먹고 개발자 정신건강에 이롭다.
업데이트 유도창 띄우기:
if (!self?.crypto?.randomUUID) {
// 크롬 2021년 버전, 파이어폭스 2021년 버전 이전의 브라우저는 업데이트 권장 알림을 띄운다.
alert("브라우저를 업데이트해 주세요!!");
}