首页 技术 正文
技术 2022年11月18日
0 收藏 897 点赞 3,442 浏览 4214 个字

在实际的软件开发项目中。常常会涉及唯一序列号的生成。本文以一个实际的程序为例,介绍了唯一序列号的生成过程。

本文生成的序列号的样式为: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;
}

程序运行的结果例如以下图所看到的:

C程序中唯一序列号的生成

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5。微信号:245924426,欢迎关注!

)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,087
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,562
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,821
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905