編輯導(dǎo)語:訂單號(hào)、支付流水號(hào)、售后訂單號(hào)、快遞取貨號(hào)、電子券核銷碼等,這些都是我們?nèi)粘T谏钪羞M(jìn)行會(huì)遇見和使用的一些單號(hào),那么為什么有些單號(hào)那么長,有些只有幾位數(shù)?有些單號(hào)一看就知道年月日的信息,有些卻看不出任何意義?為什么我淘寶訂單的后幾位數(shù)都是一樣的?今天就來帶大家看一下訂單號(hào)的是怎樣生成的。

一、訂單編號(hào)作為唯一標(biāo)識(shí)碼在業(yè)務(wù)中的應(yīng)用場(chǎng)景
單號(hào)在實(shí)際的業(yè)務(wù)過程中是做為一個(gè)訂單的唯一標(biāo)識(shí)碼的存在,提供訂單號(hào)就很方便業(yè)務(wù)人員快速定位訂單信息,給予用戶幫助。1. 用戶訂單遇到問題,需要找客服進(jìn)行協(xié)助
我們?nèi)粘T陔娚唐脚_(tái)上面購買商品的時(shí)候,很多時(shí)候需要去向平臺(tái)客服反饋在訂單過程中遇到的問題,一般這個(gè)時(shí)候平臺(tái)客戶都是要求用戶填寫訂單編號(hào)的,這樣客服可以快遞鎖定訂單信息,給用戶信息問題的解答和處理。2. 對(duì)訂單進(jìn)行操作,如線下收款,訂單核銷
我們?cè)诘谌狡脚_(tái)上購買了某一個(gè)店鋪的線下優(yōu)惠券的時(shí)候,工作人員需要對(duì)我們提供的優(yōu)惠券進(jìn)行核銷,核銷的依據(jù)一般來說就是訂單編號(hào)。 而在某些場(chǎng)景涉及到的線下收款,也會(huì)根據(jù)訂單號(hào)來進(jìn)行訂單的確認(rèn)和收款,不過日常在業(yè)務(wù)過程中將一般都將訂單號(hào)生成二維碼,再由工作人員掃碼進(jìn)行操作,因此用戶在線下對(duì)于訂單號(hào)的感知并不是很強(qiáng)烈。3. 內(nèi)部進(jìn)行訂單的處理或者跟進(jìn)
從技術(shù)的層面去講,很多時(shí)候搜索訂單相關(guān)信息的時(shí)候都是以訂單ID作為唯一標(biāo)識(shí)符,這是由于訂單號(hào)的生成規(guī)則的唯一性決定的(后面講訂單號(hào)生成規(guī)則會(huì)講到)。 由此公司內(nèi)部在進(jìn)行業(yè)務(wù)操作處理時(shí)候,比如對(duì)通知倉庫按單發(fā)貨,內(nèi)部交流某個(gè)訂單信息時(shí)候,也會(huì)直接根據(jù)訂單號(hào)來進(jìn)行信息傳達(dá)。二、編號(hào)規(guī)則的設(shè)計(jì)原則
訂單號(hào)的在業(yè)務(wù)中的使用一般都是基于唯一性的需求,因此在訂單號(hào)的設(shè)計(jì)上需要遵循幾個(gè)原則:1. 不得重復(fù)
由于我們?cè)跇I(yè)務(wù)中對(duì)于訂單編號(hào)的要求是唯一的,所以訂單編號(hào)生成的時(shí)候一定要遵循不可重復(fù)這一特性,而實(shí)際在底層生成訂單編號(hào)的時(shí)候由于業(yè)務(wù)流水很大,處于一個(gè)高并發(fā)的狀態(tài),并且訂單號(hào)的生成規(guī)則一般是固定的,所以可能會(huì)造成在同一時(shí)間多個(gè)線程讀取的生成參數(shù)相同,從而造成生成的訂單號(hào)相同(當(dāng)然這是開發(fā)人員應(yīng)該注意的問題)。 其次就是業(yè)務(wù)的長時(shí)間積累可能導(dǎo)致新生成的訂單號(hào)會(huì)與過去很久的訂單號(hào)產(chǎn)生重復(fù),所以在設(shè)計(jì)訂單號(hào)的時(shí)候一定要充分考慮到不可重復(fù)性的原則(后面講到訂單號(hào)設(shè)計(jì)中的變量部分會(huì)詳細(xì)講到)。2. 安全性
編號(hào)不能透露公司的運(yùn)營情況,比如日銷、公司流水號(hào)等信息,以及商業(yè)信息和用戶手機(jī)號(hào),身份證等隱私信息。并且不能有明顯的整體規(guī)律(可以有局部規(guī)律),任意修改一個(gè)字符就能查詢到另一個(gè)訂單信息,這也是不允許的。 類比于我們高考時(shí)候的考生編號(hào)的生成規(guī)則,一定不能是連號(hào)的,否則只需要根據(jù)順序往下查詢就能搜索到別的考生的成績,這是絕對(duì)不可允許。3. 具備一定的可讀性
位數(shù)要便于操作,因此要求訂單號(hào)的位數(shù)適中,且局部有規(guī)律。這樣可以方便在訂單異常,或者退貨時(shí)客服查詢。 過長的訂單號(hào)或易讀性差的訂單號(hào)會(huì)導(dǎo)致客服輸入困難且易錯(cuò)率較高,影響用戶體驗(yàn)的售后體驗(yàn)。因此在實(shí)際的業(yè)務(wù)場(chǎng)景中,訂單號(hào)的設(shè)計(jì)通常都會(huì)適當(dāng)攜帶一些允許公開的對(duì)使用場(chǎng)景有幫助的信息,如時(shí)間,星期,類型等等,這個(gè)主要根據(jù)所涉及的編號(hào)對(duì)應(yīng)的使用場(chǎng)景來。 而且像時(shí)間、星期這些自增長的屬于作為訂單號(hào)的設(shè)計(jì)的一部分元素,有助于解決業(yè)務(wù)累積而導(dǎo)致的訂單號(hào)重復(fù)的問題。三、編號(hào)設(shè)計(jì)中的常用變量
在遵循涉及原則的基礎(chǔ)上,我們常會(huì)使用一些變量來進(jìn)行編號(hào)的設(shè)計(jì),這也是為了滿足訂單編號(hào)的局部可讀性帶來的業(yè)務(wù)優(yōu)勢(shì),通常會(huì)有以下幾類:1. 時(shí)間
如20220525105959這種類型的年月日時(shí)分秒,編號(hào)中使用這個(gè)變量就把重復(fù)的可能性降低到一秒內(nèi)的不重復(fù)。 常用的時(shí)間變量還有很多變種類型,如取年份的后2位數(shù)、如20220525只保留到天。通常在快遞取件碼的設(shè)計(jì)中會(huì)使用月、日、周等+其他元素的設(shè)計(jì),這是為了方便取件碼可以快速重復(fù)使用,因?yàn)榭爝f取件碼通常有效期不會(huì)超過一個(gè)月就會(huì)原路退貨然后被銷毀。2. 時(shí)間戳
時(shí)間戳是一個(gè)10位數(shù)的數(shù)字,代表的是當(dāng)前時(shí)間距離1970年1月1日UTC/GMT的午夜)開始所經(jīng)過的秒數(shù)。也是經(jīng)常用來代表時(shí)間的一種方式,時(shí)間戳也可以精確到毫秒,形成一個(gè)13位數(shù)的數(shù)字。3. 類型
如訂單類型、售后類型、商品類型、支付類型等等,不同類型的可以使用不同參數(shù)進(jìn)行。通常支付類型的應(yīng)用場(chǎng)景是,線上支付和線下支付共用一套業(yè)務(wù)后臺(tái),所以為了方便區(qū)分會(huì)加入支付類型這個(gè)參數(shù)用于區(qū)分線上線下。 類比還有店鋪代碼、支付的機(jī)器代碼、操作員代碼等等。4. 用戶ID
對(duì)一些涉及到用戶的編號(hào)規(guī)則時(shí)候,可以使用到用戶ID作為變量來進(jìn)行設(shè)計(jì),如淘寶的訂單號(hào)中最后幾位數(shù)就使用了用戶ID,不過要注意不能使用完整的用戶ID,需要進(jìn)行一些規(guī)則的設(shè)計(jì)再使用。5. 商家ID
對(duì)電商系統(tǒng)中,可以把商家ID脫敏后也作為一個(gè)變量設(shè)計(jì)到編號(hào)規(guī)則中。6. 手機(jī)號(hào)
使用用戶的手機(jī)號(hào)中的某些位數(shù)作為編號(hào)中的一個(gè)變量;使用類似于手機(jī)號(hào)部分號(hào)碼這種重復(fù)度較高的屬性設(shè)計(jì)訂單編號(hào)的時(shí)候,切記不能只有一個(gè)變量,否則很容易出現(xiàn)訂單編號(hào)重復(fù)。7. 平臺(tái)形態(tài)
如果是多終端多平臺(tái)的系統(tǒng),那么可以考慮在編號(hào)中把平臺(tái)作為一個(gè)變量考慮進(jìn)去。如小程序平臺(tái)用01,安卓app使用01,PC版本使用03,第三方平臺(tái)04類型這樣的規(guī)則。8. 其他業(yè)務(wù)屬性
可以根據(jù)業(yè)務(wù)場(chǎng)景,把一些業(yè)務(wù)屬性的信息也作為變量設(shè)計(jì)進(jìn)去。9. 隨機(jī)數(shù)
隨機(jī)數(shù)就是系統(tǒng)根據(jù)程序在一定規(guī)則內(nèi)隨機(jī)生成的字符,可以為數(shù)字也可以是字符串,一般可以用來降低重復(fù);隨機(jī)數(shù)在訂單生成中的使用頻率非常高,常常是前面幾位都是一些顯式的規(guī)律性數(shù)字,比如訂單生成的時(shí)分秒,然后最后加上四位隨機(jī)數(shù)從而組成訂單號(hào)。所以讀者在設(shè)計(jì)訂單編號(hào)的時(shí)候,如果不知道如何加密,就可以簡單的插入幾位隨機(jī)數(shù)即可。10. 序列位
代表順序的數(shù)字,如10,11,12這樣的。11. 驗(yàn)證位
一般放在最后,根據(jù)前面的多位字符按照一定的規(guī)則計(jì)算最后得到的一個(gè)數(shù)字,一般為1位,主要目的是提高編號(hào)的安全性;身份證的最后一位就是校驗(yàn)位,其計(jì)算原理也是通過前面幾位數(shù)字加密算法算出來的,感興趣的讀者可以去了解一下身份證的生成規(guī)則。12. 地區(qū)信息
對(duì)有區(qū)域性質(zhì)的編號(hào)規(guī)則里面可以考慮把區(qū)域作為變量考慮進(jìn)去,如某地區(qū)分店、某地區(qū)線下的售貨機(jī)等。13. 數(shù)據(jù)庫數(shù)據(jù)的自增ID
每條數(shù)據(jù)錄入系統(tǒng)時(shí)候,一般情況都有一個(gè)唯一的ID,這個(gè)ID也可以作為編號(hào)的一種變量進(jìn)行使用。四、編號(hào)實(shí)踐方案分享
1. UUID
通?唯?識(shí)別碼,是?種軟件建構(gòu)的標(biāo)準(zhǔn),亦為開放軟件基?會(huì)組織在分布式計(jì)算環(huán)境領(lǐng)域的?部分。其?的是讓分布式系統(tǒng)中的所有元素,都能有唯?的辨識(shí)信息,?不需要通過中央控制端來做辨識(shí)信息的指定。- 1~8位采?系統(tǒng)時(shí)間,在系統(tǒng)時(shí)間上精確到毫秒級(jí)保證時(shí)間上的惟?性。
- 9~16位采?底層的IP地址,在服務(wù)器集群中的惟?性。
- 17~24位采?當(dāng)前對(duì)象的HashCode值,在?個(gè)內(nèi)部對(duì)象上的惟?性。
- 25~32位采?調(diào)??法的?個(gè)隨機(jī)數(shù),在?個(gè)對(duì)象內(nèi)的毫秒級(jí)的惟?性。
2. 時(shí)間戳+隨機(jī)數(shù)
對(duì)于一些編號(hào)需求不是很大的場(chǎng)景,如果可讀性也沒什么場(chǎng)景的要求,可以簡單的使用時(shí)間戳和隨機(jī)數(shù)進(jìn)行拼接作為編號(hào)規(guī)則使用;如時(shí)間戳1635302466+隨機(jī)數(shù)2313,則編號(hào)為16353024662313。3. 淘寶訂單號(hào)的生成規(guī)則
一共19位數(shù),前面13位數(shù)為根據(jù)時(shí)間戳和內(nèi)部定義序列,后面6位數(shù)為跟購買者ID相關(guān)的用戶位。4. 有贊商家端的訂單號(hào)
日期+時(shí)分秒+隨機(jī)數(shù)。5. 時(shí)間+時(shí)間戳+用戶+序列位
時(shí)間:取時(shí)間的年份后2位+月份+日期形成如211027。 時(shí)間戳:取時(shí)間戳的后6位數(shù) 用戶:取用戶ID的后5位數(shù),序列位2位數(shù)隨機(jī)。6. 綜合各種變量
下單渠道1位+支付渠道1位+業(yè)務(wù)類型1位+時(shí)間信息4位+下單時(shí)間的Unix時(shí)間戳后8位(加上隨機(jī)碼隨機(jī)后的數(shù)字)+用戶userid后4位共19位并不一定需要把19位全加上。7. 預(yù)先生成
系統(tǒng)預(yù)先生成不重復(fù)的編號(hào),業(yè)務(wù)系統(tǒng)要使用時(shí)候按順序取數(shù)即可。這種編號(hào)一般系統(tǒng)擁有一套成熟的加密規(guī)則,不屬于常規(guī)的訂單生成規(guī)則,一般用于加密程度較高的業(yè)務(wù)。聲明:本文由網(wǎng)站用戶香香發(fā)表,超夢(mèng)電商平臺(tái)僅提供信息存儲(chǔ)服務(wù),版權(quán)歸原作者所有。若發(fā)現(xiàn)本站文章存在版權(quán)問題,如發(fā)現(xiàn)文章、圖片等侵權(quán)行為,請(qǐng)聯(lián)系我們刪除。