C程序中唯一序列号的生成
在实际的软件开发项目中。常常会涉及唯一序列号的生成。本文以一个实际的程序为例,介绍了唯一序列号的生成过程。
本文生成的序列号的样式为:MMDDHHMINSS_XXXXXX。
程序例如以下:
/**********************************************************************
* 版权全部 (C)2014, Zhou Zhaoxiong。
*
* 文件名: SerialNo.c
* 文件标识: 无
* 内容摘要: 用于演示序列号的创建方法
* 其他说明: 无
* 当前版本号: V1.0
* 作 者: 周兆熊
* 完毕日期: 20140603
*
* 改动记录1:// 改动历史记录, 包含改动日期、版本号号、改动人及改动内容
* 改动日期: 20140603
* 版 本 号: V1.0
* 修 改 人: Zhou Zhaoxiong
* 改动内容: 创建
**********************************************************************/
#include <afxinet.h>
// 数据类型
typedef unsigned char UINT8;
typedef unsigned char UINT16;
typedef unsigned int UINT32;
typedef signed int INT32;
// 时间信息结构体
typedef struct
{
UINT8 second; /* 0-59 */
UINT8 minute; /* 0-59 */
UINT8 hour; /* 0-23 */
UINT8 day; /* 1-31 */
UINT8 month; /* 1-12 */
UINT16 year; /* 1994-2099 */
UINT8 week; /* 1-7 */
UINT8 Count10ms; /* 0-99 */
} ClockStruc;
// 函数声明
void GetCurTime(ClockStruc *pCurrentTime); // 获取当前时间
INT32 CreateSerial(UINT8 *pSerialID, UINT32 iSerialSize); // 创建序列号
INT32 main(void); // 主函数
/**********************************************************************
* 功能描写叙述: 获取当前时间
* 输入參数: 无
* 输出參数: pCurrentTime-当前时间结构体
* 返 回 值: 无
* 其他说明: 无
* 改动日期 版本号号 改动人 改动内容
* ----------------------------------------------------------------------------
* 20140603 V1.0 Zhou Zhaoxiong 创建
**********************************************************************/
void GetCurTime(ClockStruc *pCurrentTime)
{
SYSTEMTIME tCurrentTime;
GetLocalTime(&tCurrentTime);
pCurrentTime->month = (UINT8)tCurrentTime.wMonth;
pCurrentTime->day = (UINT8)tCurrentTime.wDay;
pCurrentTime->hour = (UINT8)tCurrentTime.wHour;
pCurrentTime->minute = (UINT8)tCurrentTime.wMinute;
pCurrentTime->second = (UINT8)tCurrentTime.wSecond;
pCurrentTime->week = (UINT8)tCurrentTime.wDayOfWeek;
if (pCurrentTime->week == 0) // 表示星期天
{
pCurrentTime->week = 7;
}
}
/**********************************************************************
* 功能描写叙述: 创建序列号
* 输入參数: iSerialSize: 序列号长度
* 输出參数: pSerialID: 序列号
* 返 回 值: 0-成功 -1-失败
* 其他说明: 序列号的样式: MMDDHHMINSS_XXXXXX
* 改动日期 版本号号 改动人 改动内容
* --------------------------------------------------------------
* 20140603 V1.0 Zhou Zhaoxiong 创建
***********************************************************************/
INT32 CreateSerial(UINT8 *pSerialID, UINT32 iSerialSize)
{
ClockStruc tClock = {0};
static UINT32 iTailNum = 0;
if (NULL == pSerialID)
{
printf("CreateSerial: input parameter is NULL.\n");
return -1;
}
GetCurTime(&tClock);
_snprintf((char *)pSerialID, iSerialSize, "%02d%02d%02d%02d%02d_%06d",
tClock.month, tClock.day, tClock.hour, tClock.minute, tClock.second, iTailNum);
iTailNum ++;
if (iTailNum > 999999)
{
iTailNum = 0;
}
return 0;
}
/****************************************************************
* 功能描写叙述: 主函数
* 输入參数: 无
* 输出參数: 无
* 返 回 值: 0-运行成功 -1-运行失败
* 其他说明: 无
* 改动日期 版本号号 改动人 改动内容
* ------------------------------------------------------------------------
* 20140603 V1.0 Zhou Zhaoxiong 创建
****************************************************************/
INT32 main(void)
{
UINT32 iLoopFlag = 0; // 该变量用于表示循环标志
INT32 iRetValue = 0; // 该变量用于表示调用CreateSerial函数返回的值
UINT8 szSerialID[50] = {0}; // 该变量用于存放生成的序列号
// 生成10个序列号, 并打印出来
for (iLoopFlag = 0; iLoopFlag < 10; iLoopFlag ++)
{
iRetValue = CreateSerial(szSerialID, sizeof(szSerialID));
if (iRetValue != 0)
{
printf("exec CreateSerial failed.\n");
return -1;
}
printf("第%d个序列号为: %s\n", iLoopFlag + 1, szSerialID);
}
return 0;
}
程序运行的结果例如以下图所看到的:
(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5。微信号:245924426,欢迎关注!
)
C程序中唯一序列号的生成的更多相关文章
- Java中唯一数的生成
唯一数的生成很简单,基本上以时间为基础进行生成.在JDK里面已经有java.util.UUID类可以生成唯一的随机数.如果希望生成的唯一数为特定的格式,那么就需要自己来生成唯一数了.生成唯一数时有两个 ...
- 分布式系统中唯一 ID 的生成方法
在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的 unique ID? 在单机系统中 (例如一个 MySQL 实例), unique ID ...
- 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds
RSS全称Really Simple Syndication.一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息.RSS文档需遵守XML规范的,其中必需包含标题.链接.描述信息,还可以包含发 ...
- 微信小程序中用户唯一ID的获取
折腾到半夜,搞得挺兴奋,总结一下,免得忘了: 1.微信小程序直接获得的是一些简单信息,基本无用 2.用户唯一标识是openid,还有一个unionid是关联多个公众号之类情况下用,我不大关心 3.在g ...
- 高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]
需求说明 在过去单机系统中,生成唯一ID比较简单,可以使用MySQL的自增主键或者Oracle中的sequence, 在现在的大型高并发分布式系统中,以上策略就会有问题了,因为不同的数据库会部署到不同 ...
- 分布式系统中我们会对一些数据量大的业务进行分拆,分布式系统中唯一主键ID的生成问题
分布式全局唯一ID生成策略 https://www.cnblogs.com/vandusty/p/11462585.html 一.背景 分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订 ...
- 5.把报表集成到Web应用程序中-生成网页和导出两种方式
转自:https://wenku.baidu.com/view/104156f9770bf78a65295462.html 第四部分,把报表集成到Web应用程序中 用MyEclipse新建一个Web ...
- Delphi 如何在程序中执行动态生成的Delphi代码
如何在程序中执行动态生成的Delphi代码 经常发现有人提这类问题,或者提问内容最后归结成这种问题 前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机取巧. 这里 ...
- 如何在程序中执行动态生成的Delphi代码
如何在程序中执行动态生成的Delphi代码 经常发现有人提这类问题,或者提问内容最后归结成这种问题 前些阵子有位高手写了一个“执行动态生成的代码”,这是真正的高手,我没那种功力,我只会投机取巧. 这里 ...
随机推荐
- phpcms v9栏目列表调用每一篇文章内容方法1
我们先来看下默认栏目调用的代码: 复制代码代码如下:{pc:content action="lists" catid="$catid" num="25 ...
- 使用pyinstaller 2.1将python打包并添加版本信息和图标
最近用 wxpython写了一个小的脚本,因为想要发布给没有装python和wxpython的人使用,遂决定使用pyinstaller 2.1进行打包. 其中遇到几个问题: 1,给打包的文件添加图标 ...
- 4542: [Hnoi2016]大数
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...
- Spring MVC小结1
由于最近刚开始学Spring MVC,所以来讲一下自己的理解. 首先进行环境配置: 1.jdk 2.myeclipse 3.tomcat 4.maven 配置maven的时候出现了一个小的问题,JAV ...
- 判断是否为ie(包含ie11)
if (!!window.ActiveXObject || "ActiveXObject" in window) { alert("IsIE"); }
- libstdc++.so.5: cannot open shared object file: No such file or directory
中文分词一般会选择ICTCLAS的模块,虽然不能说很完美,但也算是一个不错的选择.它提供了windows版本和linux版本,并支持C/C#/JNI接口.这本来是一个不错的事情,但版本一多,官方似乎就 ...
- java:找出占用CPU资源最多的那个线程(HOW TO)
在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资 ...
- 两次fopen不同的文件返回相同的FILE* 地址
最近接触一个垃圾程序,出现一个奇怪的bug,现象是两次fopen不同的文件返回相同的FILE*地址,第二次返回的FILE*有时候无端端的就被关闭了.以下代码是对这个bug的概括: auto fp1 = ...
- C#处理四舍五入的问题
在处理一些数据时,我们希望能用“四舍五入”法实现,但是C#采用的是“四舍六入五成双”的方法,如下面的例子,就是用“四舍六入五成双”得到的结果: double d1 = Math.Round(1.25, ...
- (转载)不能启动虚拟机 Unable to open kernel device "\\.\Global\vmx86
(转载)http://blog.csdn.net/shenghuiping2001/article/details/7083153 今天系统加了内存条,设置变了一下: 就启动不起虚拟机了,报错: Un ...