很多產品都會用到「實名認證」,比如售票軟件、銀行卡、交易軟件等。如此常見的功能,當然也是產品人應該了解的。當然,鑒于產品人無需過多涉及技術知識,我們就談談產品人應該了解的「實名認證」知識。
1.實名認證的方式
在互聯網產品中,「實名認證」的方式大致有3種:
1)姓名+身份證號碼匹配認證。產品舉例:火幣網、金斧子網站;
2)身份證正反面照片+人臉照片認證。產品舉例:火幣網、云幣網;
3)身份證正反面照片+人臉識別。產品舉例:阿里小號。
要采取哪種方式,要視產品目標與用戶需求而定。目前來看,方式3應用較少,可能這有一定的技術難度,所以一般公司并不會采用。而方式1與方式2的使用都比較多,其中方式2更為可靠,方式1更為簡單。
以上3種方式,都談不上絕對可靠,但可靠性在逐漸升高,能過濾掉的作弊用戶也在增多。當然,技術難度與維護成本也在升高。
所以,有些網站對不同級別用戶使用不同的認證方式:對低級別用戶,使用方式1;對中等級別用戶,使用方式2;對高級用戶,使用支付寶的芝麻認證。
我親身參與過的,是方式1,下面就詳細聊聊方式1。
2.姓名+身份證號碼匹配認證
乍一看,這種認證似乎很簡單——不就是驗證一下是否匹配嗎?但細分之后,就有很多值得玩味的細節。比如:如何驗證身份證號碼與姓名是否匹配?驗證過程速度如何?驗證的成本如何?
1)認證成本與時間
姓名+身份證號碼是否匹配,根據官方系統提供的數據進行。這就帶來了兩個關鍵問題:
a.成本較高——一次認證1元以上(具體多少就不說了);
b.認證時間可能較長——有時可能需要十幾秒才能返回認證結果。
解決方案:盡量將錯誤認證阻擋在產品中,而不是讓其進入官網系統,從而節省成本,節省用戶驗證時間,提升用戶體驗。
因此,應該在姓名、身份證號的格式驗證上下更多工夫。
a.姓名格式驗證:國人的姓名,大都為2~4位中文字符,所以驗證時應驗證其是否為中文、位數是否大于2位小于4位?當然,上限可以適當提高,畢竟有些人姓名真還挺長,據說最長的有15位。。。
b.身份證號碼格式驗證:詳見下文。
2)身份證號碼位數
我國有過兩代身份證號碼:
一代為15位身份證號碼,當時的國家標準為GB11643-1989《社會保障號碼》。你看,原來都不叫身份證號碼;
另一代為18位身份證號碼,其國家標準為GB11643-1999《公民身份號碼》,這就是我們現在廣為使用的身份證號碼。《國務院關于實行公民身份號碼制度的決定》提到:
國務院決定,自1999年10月1日起在全國建立和實行公民身份號碼制度。
從1999年后,就開始逐步推行第二代身份證號碼,那么,現在還有人在用第一代的15位身份證號碼嗎?我猜是有的,雖然沒找到具體數據,但在全國公民身份證號碼查詢服務中心看到了下圖這個查詢功能:
既然存在兩代身份證號碼?那就給我們帶來一個問題:是否需要對兩種身份證號碼都進行驗證?
解決方案:根據不同用戶,確定驗證的身份證號碼位數。對于多數用戶,只需驗證18位身份證號碼。
為什么?因為有足夠理由相信如今使用15位身份證號碼的人已經很少,盡管沒找到具體數據。理由吧,有這么幾點:
a.自1999年開始就在推行18位身份證號碼,至今已過去近18年。而身份證都有有效期,相信很多身份證號碼都在這個過程中從15位升為了18位。而且,我們往往在十幾歲才開始辦身份證,以16歲為起點,第一代辦理18位號碼身份證的人,現在已經34歲。
為什么以16歲為起點?因為《中華人民共和國公安部令第43號》提到:
第六條年滿16周歲的中國公民,應當向常住戶口所在地的戶口登記機關履行申領居民身份證的手續。公民年滿16周歲時,在從生日起計算的30天內申領居民身份證。
b.二代身份證的推行,讓多數人已經用上了18位身份證號碼。比如12306網站的這樣一條聲明,就能說明目前使用二代身份證的人已占絕大多數。
c.而且,就互聯網用戶來說,那就更少,因為互聯網用戶更為年輕,對新事物也更容易接受。
3)身份證號碼規則
a.表示形式:如下圖,下圖來自GB11643-1999《公民身份號碼》。
b.校驗碼:如下圖,下圖來自GB11643-1999《公民身份號碼》。
PS:下圖只提供了部分校驗碼的規則,其他位置的號碼規則不再提供,具體可以參見GB11643-1999《公民身份號碼》。
解決方案:按照身份證號碼的規則完成驗證,確定用戶輸入的身份證號碼格式是否正確。這和產品人關系不大,主要靠咱們無敵的開發哥哥。有興趣的,給你段代碼看看(其實代碼不是太難懂)。
其實,通過這一步,不僅保證了身份證號碼格式的正確性,也基本同時保證了其內容的正確性,因為身份證號的格式與內容相關性很強,校驗位正是通過前面各個位置號碼的內容來確定的。
綜上,通過產品自身檢驗用戶姓名、身份證號格式的正確性,驗證成功后,再調用官方系統的數據,就能很好地降低成本、減少驗證時間。