在实际的软件开发项目,通常,它包括产生一唯一的序列号。在本文中,一个切实可行的方案,例如,它引入了一个唯一的序列号生成过程。

本文生成的序列号的样式为: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该程序生成一个唯一的序列号的更多相关文章

  1. 利用STM32F唯一96bit序列号实现反拷贝加密的源代码公开(转)

    源:利用STM32F唯一96bit序列号实现反拷贝加密的源代码公开 //---------------------------------------------------------------- ...

  2. Go hashcode 输入一个字符串,得到一个唯一标识码

    如何输入一个字符串,得到一个唯一的hashcode? 例子如下: package main import ( "fmt" "hash/crc32" ) // S ...

  3. 如何实现用户id生成一个唯一邀请码

    #如何实现用户id生成一个唯一邀请码 #创建验证码 function createCode($user_id) { static $source_string = 'E5FCDG3HQA4B1NOPI ...

  4. 编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。

    查看本章节 查看作业目录 需求说明: 模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号.而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单 现在简单模拟 ...

  5. Java中生成一个唯一值的方式

    现总结几种生成一个唯一值的方式 第一种:采用nanoTime() // 理论上存在重复的可能,可以在后面再加上一个随机字符串 Random r = new Random(); for (int i = ...

  6. 根据用户id生成一个唯一邀请码

    需求描述:根据用户id生成与之对应的唯一邀请码,范围为‘0-9A-Z’. 这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到 ...

  7. 生成唯一编号(序列号)--sql存储过程

    CREATE procedure [dbo].[P_Sys_GetSerialNo] --取业务序列号 @SeqType int, --序列号类别,4位数,如:10+2+1 即1021 , --要取的 ...

  8. 采用PHP函数uniqid生成一个唯一的ID

    http://www.daimajiayuan.com/sitejs-17815-1.html

  9. 生成一个唯一token

    $token = md5(uniqid(rand(), true));

随机推荐

  1. json转换成list map集合

    import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Set; i ...

  2. Linux下select, poll和epoll IO模型的详解

    http://blog.csdn.net/tianmohust/article/details/6677985 一).Epoll 介绍 Epoll 可是当前在 Linux 下开发大规模并发网络程序的热 ...

  3. JAVA网络爬虫WebCollector深度解析——爬虫内核

    WebCollector爬虫官网:https://github.com/CrawlScript/WebCollector 技术讨论群:250108697 怎样将爬虫内核导入自己的项目? 1.进入爬虫官 ...

  4. html浏览器兼容性的 JavaScript语法

    1.      在FireFox中能够使用与HTML节点对象ID属性值同样的JS变量名称.可是IE中不行. 解决的方法:在命名上区分HTML节点对象ID属性值和JS变量 2.      IE不支持JS ...

  5. codeforces 325B Stadium and Games

    这道题思路很简单,设刚开始队伍数为d=2^p*x,其中x是奇数,则比赛场次n=(2^p-1)*x+(x-1)*x/2,然后从0开始枚举p的值,接着解一元二次方程x^2+(2^(p+1)-3)x-2*n ...

  6. 《Android系统开发》笔记

    <Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...

  7. Copy xml 文件

    public static void copyFailFile(String bugID) throws Exception { File file = new File(".") ...

  8. Zigbee开发(1)

    只是研究zigbee的技术,也许后续的博客不会有很及时的更新,有时间 写一点东西能让大家有所收获吧. 环境搭建 Windows 64位的操作系统 IAR7.6 for 8051 ZStack CC25 ...

  9. uva796(求桥数目)

    传送门:Critical Links 题意:给出一个无向图,按顺序输出桥. 分析:模板题,求出桥后排个序输出. #include <cstdio> #include <cstring ...

  10. Erlangserver紧内存优化解决方案

    提出的问题:server100万人在线,16G内存快被吃光. 玩家进程占用内存偏高 解决方法: 第一步: erlang:system_info(process_count). 查看进程数目是否正常,是 ...