static inline int secondNow() { struct timeval v; gettimeofday(&v, (struct timezone *) NULL); /* Unix Epoch time (time since January 1, 1970 (UTC)) */ return v.tv_sec + v.tv_usec/1.0e6; } static struct tm* secondsSinceEpochToDateTime(struct tm* pTm, uint64_t SecondsSinceEpoch) { uint64_t sec; uint quadricentennials, centennials, quadrennials, annuals/*1-ennial?*/; uint year, leap; uint yday, hour, min; uint month, mday, wday; static const uint daysSinceJan1st[2][13]= { {0,31,59,90,120,151,181,212,243,273,304,334,365}, // 365 days, non-leap {0,31,60,91,121,152,182,213,244,274,305,335,366} // 366 days, leap }; /* 400 years: 1st hundred, starting immediately after a leap year that's a multiple of 400: n n n l \ n n n l } 24 times ... / n n n l / n n n n 2nd hundred: n n n l \ n n n l } 24 times ... / n n n l / n n n n 3rd hundred: n n n l \ n n n l } 24 times ... / n n n l / n n n n 4th hundred: n n n l \ n n n l } 24 times ... / n n n l / n n n L <- 97'th leap year every 400 years */ // Re-bias from 1970 to 1601: // 1970 - 1601 = 369 = 3*100 + 17*4 + 1 years (incl. 89 leap days) = // (3*100*(365+24/100) + 17*4*(365+1/4) + 1*365)*24*3600 seconds sec = SecondsSinceEpoch + 11644473600; wday = (uint)((sec / 86400 + 1) % 7); // day of week // Remove multiples of 400 years (incl. 97 leap days) quadricentennials = (uint)(sec / 12622780800ULL); // 400*365.2425*24*3600 sec %= 12622780800ULL; // Remove multiples of 100 years (incl. 24 leap days), can't be more than 3 // (because multiples of 4*100=400 years (incl. leap days) have been removed) centennials = (uint)(sec / 3155673600ULL); // 100*(365+24/100)*24*3600 if (centennials > 3) { centennials = 3; } sec -= centennials * 3155673600ULL; // Remove multiples of 4 years (incl. 1 leap day), can't be more than 24 // (because multiples of 25*4=100 years (incl. leap days) have been removed) quadrennials = (uint)(sec / 126230400); // 4*(365+1/4)*24*3600 if (quadrennials > 24) { quadrennials = 24; } sec -= quadrennials * 126230400ULL; // Remove multiples of years (incl. 0 leap days), can't be more than 3 // (because multiples of 4 years (incl. leap days) have been removed) annuals = (uint)(sec / 31536000); // 365*24*3600 if (annuals > 3) { annuals = 3; } sec -= annuals * 31536000ULL; // Calculate the year and find out if it's leap year = 1601 + quadricentennials * 400 + centennials * 100 + quadrennials * 4 + annuals; leap = !(year % 4) && (year % 100 || !(year % 400)); // Calculate the day of the year and the time yday = sec / 86400; sec %= 86400; hour = sec / 3600; sec %= 3600; min = sec / 60; sec %= 60; // Calculate the month for (mday = month = 1; month < 13; month++) { if (yday < daysSinceJan1st[leap][month]) { mday += yday - daysSinceJan1st[leap][month - 1]; break; } } // Fill in C's "struct tm" memset(pTm, 0, sizeof(*pTm)); pTm->tm_sec = sec; // [0,59] pTm->tm_min = min; // [0,59] pTm->tm_hour = hour; // [0,23] pTm->tm_mday = mday; // [1,31] (day of month) pTm->tm_mon = month - 1; // [0,11] (month) pTm->tm_year = year - 1900; // 70+ (year since 1900) pTm->tm_wday = wday; // [0,6] (day since Sunday AKA day of week) pTm->tm_yday = yday; // [0,365] (day since January 1st AKA day of year) pTm->tm_isdst = -1; // daylight saving time flag return pTm; } int main(void) { uint64_t time = secondNow(); struct tm pTm; secondsSinceEpochToDateTime(&pTm, time); char buf[100] = {0}; int num = rand()%1000; //生成100000内的随机数 printf("rand num:%4d\n", num); sprintf(buf, "%02d%02d%02d%02d%02d%04d", 1+pTm.tm_mon, pTm.tm_mday, pTm.tm_hour, pTm.tm_min, pTm.tm_sec, num); //格式化时间和随机数字符串,存放在buf内 printf("guid:%s\n", buf); //输出guid到控制台 }
相关推荐
[C++]C++生成GUID的方法,代码经过测试,很好用。
用于生成机器的GUID,全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。GUID是一种由算法生成的二进制长度为128位的数字标识符。
Google C++ Style Guide原文+译文
GUID生成程序,生成后可用来做数据库的主键,非常好用!!!
GUID生成器 GUID生成小程序 快速生成GUID,自动复制到剪贴板。
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。生成算法用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。
生成GUID程序,C#源代码,System.Guid.NewGuid().ToString()全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用 GUID。 GUID...
模仿VS自带的GUID生成器,可生产GUID编码,点击即可复制到粘贴板
LabVIEW通过调用.net实现全球唯一码GUID的生成。 只有一个VI,简单快捷。
轻松修改文件guid的小工具。全局唯一标识替换工具,作者Yonsm.net
GUID生成工具源码 guid生成工具,有源码的。 .NET C# GUID自动生成
一个简单的实现guid算法的程序代码!这主要是应用c#语言编写的后台代码!
华擎主板用编程器刷BIOS后,会造成1394GUID丢失,开机启动后必须按F1才能继续下一步(进BIOS、选择启动菜单、进操作系统)。用此工具可重新写入1394GUID,免去开机后按F1的烦恼。
Guid生成器,方便快捷, 下面的字水了: 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想...
CString CTestGetUUIDDlg::newGUID() { CString buf; GUID guid; if (S_OK == ::... , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5] , guid.Data4[6], guid.Data4[7]); } return buf; }
2022.10月最新工具,X网站卖350的,QQ安卓模拟器GUID无视验证登录工具...TX9.20更新版本需要设备锁验证, 使用这个guidqq可以无视验证直接登陆(必须小号带guid才可以) 后期TX再更新不负责,不懂的可以私信我 付费教学
Guid生成器(随机生成工具) 随机生成GUID并复制到剪切板,方便文件命名。
get guid 1c. very good tool
易语言GUID批量生成器源码,GUID批量生成器,生成新的GUID,验证,生成GUID并加入列表,后续处理,CoCreateGuid
guid格式还原工具