C# 生成系统唯一号
生活随笔
收集整理的這篇文章主要介紹了
C# 生成系统唯一号
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
生成唯一號:思路,根據yymmddhhmmss+自增長號+唯一服務器號(?SystemNo)生成唯一碼,總長度19,例如:1509281204550000101.
public?class?UniqueNumber { ????private?static?long?num = 0;//流水號 ????private?static?object?lockObj =?new?object();//鎖 ????/// <summary> ????/// 生成自增長碼 ????/// </summary> ????/// <returns></returns> ????private?static??long?GenerateUniqueNumber() ????{ ????????lock?(lockObj)//加鎖 ????????{ ????????????num = num + 1; ????????????num = (num == 100000 ? 1 : num);?//如果大于10W則從零開始,由于一臺服務器一秒內不太可能有10W并發,所以yymmddhhmmss+num是唯一號。yymmddhhmmss+num+SystemNo針對多臺服務器也是唯一號。 ????????} ????????return?num; ????} ????/// <summary> ????/// 獲取唯一碼 ????/// </summary> ????/// <param name="SystemNo">系統號</param> ????/// <returns>唯一碼</returns> ????public?static?long?GetUniqueNumber(int?SystemNo) ????{ ????????if?(SystemNo > 99 || SystemNo < 1) ????????{ ????????????throw?new?Exception("系統號有誤"); ????????} ????????lock?(lockObj)// 要使靜態變量多并發下同步,需要兩次加鎖。 ????????{ ????????????string?time = DateTime.Now.ToString("yyMMddHHmmss");//12位; ????????????return?long.Parse(time + GenerateUniqueNumber().ToString().PadLeft(5,?'0') + SystemNo.ToString().PadLeft(2,?'0'));//19位 ????????} ????} } ? 測試:
static?void?Main(string[] args) ??????{ ??????????for?(int?i = 1; i < 98; i++)//N個線程 ??????????{ ??????????????Thread thread =?new?Thread(new?ParameterizedThreadStart(Exe)); ??????????????thread.Start(i); ??????????} ??????} ??????public?static?void?Exe(object?sysNo) ??????{ ??????????for?(int?i = 0; i < 1000; i++)//M次循環執行 ??????????{ ??????????????long?v = UniqueNumber.GetUniqueNumber((int)sysNo); ??????????????DbHelperMySQL.ExecuteSql(" insert into abacus.guidtest (val) values ('"?+ v +?"');"); ??????????} ??????}
mySQl腳本:
SELECT?*?FROM?abacus.guidtest; select?count(id)?from?abacus.guidtest; select?val?from?abacus.guidtest group?by?val having?count(val) >1; truncate?table?abacus.guidtest; CREATE?TABLE?`guidtest` ??`id`?int(11)?NOT?NULL?AUTO_INCREMENT, ??`val`?bigint(20)?NOT?NULL, ??PRIMARY?KEY?(`id`), ??UNIQUE?KEY?`id_UNIQUE` (`id`) ) ENGINE=InnoDB?DEFAULT?CHARSET=utf8; ? ?
轉載于:https://www.cnblogs.com/zhangzhi19861216/p/4839813.html
總結
以上是生活随笔為你收集整理的C# 生成系统唯一号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个关于王源的微信网名
- 下一篇: 学猫叫是谁唱的啊?