logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

[C/C++] Random UUID String 생성 코드

by digipine posted Oct 21, 2021
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <time.h>

int get_nonce(void) {
    /* add your random nonce int value for more secure protection */
    return 289182;
}

int random_int() {
	unsigned int nonce = (unsigned int)time(NULL) & get_nonce(); 
	srand(nonce);
	return rand();
}

uint64_t random_uint64(void) {
	uint64_t num = random_int() & 0x1FFFFF;
	num = (num << 32) | random_int();
	return num;
}

char *random_uuid(void) {
	const char *template = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";
	const char *samples = "0123456789abcdef";
	union { unsigned char b[16]; uint64_t word[2]; } rnd;
	rnd.word[0] = random_uint64();
	rnd.word[1] = random_uint64();
	/* Generate the string */
	char uuid[37], *dst = uuid;
	const char *p = template;
	int i = 0, n = 0;
	while(*p) {
		n = rnd.b[i >> 1];
		n = (i & 1) ? (n >> 4) : (n & 0xf);
		switch (*p) {
			case 'x':
				*dst = samples[n];
				i++;
				break;
			case 'y':
				*dst = samples[(n & 0x3) + 8];
				i++;
				break;
			default:
				*dst = *p;
		}
		p++;
		dst++;
	}
	uuid[36] = '\0';
	return strdup(uuid);
}

int main(int argc, char *argv[]) {
	char *tmp_uid = random_uuid();
	printf("make uuid : %s\n", tmp_uid); 
	free(tmp_uid);
	return 0;
}

TAG •

List of Articles
No. Subject Author Date Views
3 C++ Atomic 클래스에 대해서 file 엉뚱도마뱀 2017.12.13 2139
2 소켓 통신을 이용한 HTTP 서버 개발 강의록 file digipine 2020.08.01 1482
» [C/C++] Random UUID String 생성 코드 digipine 2021.10.21 1302
Board Pagination Prev 1 2 Next
/ 2