溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C程序中唯一序列號的生成實例詳解

發(fā)布時間:2020-10-14 18:54:01 來源:腳本之家 閱讀:266 作者:lqh 欄目:編程語言

C程序中唯一序列號的生成實例詳解

在實際的軟件開發(fā)項目中,經(jīng)常會涉及唯一序列號的生成。本文以一個實際的程序為例,介紹了唯一序列號的生成過程。
本文生成的序列號的樣式為:MMDDHHMINSS_XXXXXX。

程序如下:

* 修改記錄1:// 修改歷史記錄, 包括修改日期、版本號、修改人及修改內(nèi)容
* 修改日期: 20140603
* 版 本 號: V1.0
* 修 改 人: Zhou Zhaoxiong
* 修改內(nèi)容: 創(chuàng)建
**********************************************************************/
  
#include <afxinet.h>
  
// 數(shù)據(jù)類型
typedef unsigned char    UINT8;
typedef unsigned char    UINT16;
typedef unsigned int      UINT32;
typedef signed  int       INT32;
  
  
// 時間信息結(jié)構(gòu)體
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;
  
  
// 函數(shù)聲明
void GetCurTime(ClockStruc *pCurrentTime);              // 獲取當(dāng)前時間
INT32 CreateSerial(UINT8 *pSerialID, UINT32 iSerialSize);   // 創(chuàng)建序列號
INT32 main(void);                                       // 主函數(shù)
  
  
/**********************************************************************
* 功能描述: 獲取當(dāng)前時間                      
* 輸入?yún)?shù): 無
* 更多精彩內(nèi)容:http://www.bianceng.cn/Programming/C/                      
* 輸出參數(shù): pCurrentTime-當(dāng)前時間結(jié)構(gòu)體               
* 返 回 值: 無                           
* 其它說明: 無                           
* 修改日期   版本號   修改人     修改內(nèi)容         
* ----------------------------------------------------------------------------
* 20140603    V1.0  Zhou Zhaoxiong    創(chuàng)建          
**********************************************************************/
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;
  }
}
  
  
/**********************************************************************
* 功能描述: 創(chuàng)建序列號
* 輸入?yún)?shù): iSerialSize: 序列號長度
* 輸出參數(shù): pSerialID: 序列號
* 返 回 值: 0-成功 -1-失敗
* 其它說明: 序列號的樣式: MMDDHHMINSS_XXXXXX
* 修改日期     版本號      修改人     修改內(nèi)容
* --------------------------------------------------------------
* 20140603      V1.0     Zhou Zhaoxiong   創(chuàng)建
***********************************************************************/
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;
}
  
  
/****************************************************************
* 功能描述: 主函數(shù)                      
* 輸入?yún)?shù): 無                        
* 輸出參數(shù): 無                        
* 返 回 值: 0-執(zhí)行成功 -1-執(zhí)行失敗              
* 其他說明: 無                        
* 修改日期    版本號    修改人    修改內(nèi)容
* ------------------------------------------------------------------------
* 20140603     V1.0   Zhou Zhaoxiong   創(chuàng)建
****************************************************************/
INT32 main(void)
{
  UINT32 iLoopFlag   = 0;   // 該變量用于表示循環(huán)標(biāo)志
  INT32 iRetValue   = 0;    // 該變量用于表示調(diào)用CreateSerial函數(shù)返回的值
  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;
}

程序運行的結(jié)果如下圖所示:

C程序中唯一序列號的生成實例詳解

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI