(純個人分析,希望各位大咖給予意見,我會繼續完善感謝~)

春運將至,大家都非常關注12306的搶票,驗證碼和手機驗證也成了段子手和噴子們爭先恐後調侃的物件,先來看看12306是如何被黑的

不得不佩服各位P圖大神的功力,這樣黑12306真的好嗎,容我先擦一下鼻血~

12306圖片驗證碼

搞笑文章
網路水軍是這樣調侃12306的

以上圖片據來自網路


那麼從引發這個問題的驗證碼說起,12306驗證碼的變遷分為以下幾代:

簡單數字——數字加字母——加減法算式——閃爍變形字母動態碼——中間新增干擾線的變形字母——圖形驗證碼

配圖如下

簡單數字 (好吧這是PMCAFF的找不到以前的圖片了)
簡單數字 (好吧這是PMCAFF的驗證碼找不到原始圖片了? )

數字加字母驗證碼
數字加字母驗證碼(機器真的很難識別嗎)

動態圖片驗證碼(非常短命因為防不了機器只能防止人類)
動態圖片驗證碼(非常短命防不了機器只能防止人類)

圖形驗證碼
圖形驗證碼萬眾吐槽版本

第一個驗證碼是最常見,很多網站都在用,畢竟沒有需求就沒有必要做多麼高階的功能。於是我們聚焦12306的需求,在購票方面, 從最重要緊急到不重要不緊急排序如下:

  • 防止售票員舞弊(我沒有事實根據,但知乎和頭條很多人說)
  • 實名認證(包括身份證、手機號)
  • 防止黃牛大量囤票(就是以前在車站的時候,一個人天南海北的胡買一通票)
  • 防止黃牛通過人力囤票
  • 防止黃牛為其他人代購票(也就是現在的刷票,人工在12306代購那不叫做黃牛)
  • 建立良好的公眾形象

仔細想想,圖片驗證碼的作用就是用於刷票的,那麼為什麼不是用於防止黃牛大量囤積或者用於防止黃牛用自己的賬號買票呢,因為圖片驗證碼有一個概率,根據現在的驗證碼規則,在8個圖中選擇1~3個圖,那麼隨機選一個選中的概率就是:

應用一下中學排列組合知識,C 表示組合數
應用一下中學排列組合知識,C 表示組合數

概率是1.086%也就是說黃牛買100次票就會有1次搶到票。這一點對普通使用者來說是毫無作用的,一般的使用者就算用刷票軟體100次才能有1次過驗證碼,搶票成本太高了。但對於大量囤積票黃牛販子來說這個概率足矣。使用一個機器100次能過1次,那麼使用幾十幾百個機器搶,就可以想囤積多少就屯多少了。而驗證碼用來杜絕黃牛拿自己的賬號人力屯票也是行不通的,黃牛人工操作,你總沒辦法吧,人力屯票,就像以前的黃牛都是到火車站排隊去買票一樣。

針對這幾點,我們應該怎麼樣設計才能防止呢,一點一點來說:

一、實名認證

這是一個很大的課題,不要想當然的認為很容易。在足夠的利益面前,資訊是可以偽造的,而我們還不能過分的追求唯一性。

舉個例子,比如有人說“IP、MAC、序列號、作業系統…重複就視為是一個人且只能買一張票”。這怎麼可能 o(╯□╰)o~~ 難道就不允許換一個電腦了嘛,難道就不允許中轉換乘了嘛。還有人說,手機號驗證了就可以解決實名認證問題了。我只能說too young too simple,網上有那麼多代發代收簡訊的渠道,用假手機號過手機驗證碼根本不是夢?。

仔細梳理一下,實名認證主要是幾點:份證驗證、賬號的手機號驗證、賬號與真人對應的認證。

身份證的驗證:目前是無法完全杜絕的,無論何種情況下,黃牛總是能弄到真實或者偽造的身份證,身份證識別也是無法準確驗證的 (也許若干年後,可以再身份證上弄一個像銀行密保、網遊盾一樣的東西,但那一天還遠遠沒有到來)。那這怎麼辦呢,我也不知道?。我只好研究了一下12306的預防機制,發現一個身份證新增在某處之後在180天之內不允許刪除,身份證新增有一定的上限。這應該是一個為了打擊黃牛的功能,如果各位有啥更好的想法,可以在下面留言一起討論哦~

手機號的驗證:不知道大家是否知道在滴滴、快滴出臺新使用者補貼時同時,就出了一大批來代收發驗證碼的平臺,這些平臺就是為了給使用者在沒有手機號的情況下,可以註冊很多很多很多賬號。這一問題也很難解決,總不可能讓電信提供一個所有真實手機號碼的資料庫吧。就算12306和電信移動都是國企可以合作這也很困難,甚至電信自己也沒有這麼一個資料庫。反觀12306還是可以的,其實,現在的這種主動發簡訊的方式 雖然有點漏洞,但也總比沒有好多了。

最後就是賬號和真人對應: 大家肯定和我一樣還是完全沒有想法,這已經是超出時代的課題了~ 最多就是用驗證碼是去勉強的區分一下傻的機器和真人(包含聰明的機器)。

二、 如何防止黃牛大量囤積票

這一點還要從概率的方面考慮。任何驗證策略總是有一個成功概率的,只要有足夠大的基數,那就一定能達到預期的成功數量。最直接的應對方式就出現了,就是單客戶端、單賬號、單個手機號在一定的時間段有一定的訪問次數上限 (如一個小時或者一天內查詢的次數設定一個限制,這個限制可以考慮根據時間段的長度來決定限額大小)。一般的產品這麼做是沒必要的,但是對於12306卻十分有必要,限額是最不容易被使用者感知到的功能,也是我最推薦的方案,最好的策略就是能潤物細無聲的只對大量刷票的使用者做出一定的限制,讓普通使用者有一個好好買票的機會。

三、 如何防止黃牛人力囤票

在這一方面來說驗證碼也是毫無用處的。因為人工買票也是一個很好地囤票手段。在農村招一批年輕的小夥子,找一個黑網咖,經過半天的培訓做搶票的工作肯定毫無問題了。一整天人工刷票來囤積,有客戶沒票著急買的時候加價20%~80%賣給他。找個人少的時間 (以前可以凌晨買票,黃牛的賬戶先退票,客戶賬戶再買,這就完成了票的轉移)。針對這一點,最基本的防禦方法就是實名購票,但這還不夠,還有:

  • 一個賬戶不能購買的來回區間過多,(比如限制15個始發站、終點站組合),或者可以要設定家鄉地和工作地,買去這兩地或從這裡出發的車票會比一般客戶容易 (春運期間回家肯定是頭等大事,別的就放放再說吧,總不可能你出去旅遊玩比人家回家看望父母要重要吧~)
  • 有一個策略經常被提到,就是要按照身份證限制買票時間 (實際上這個功能有一段時間上線過)。我覺得這是超級不靠譜的需求,大家難道沒想過如果身份證丟了被賣到黃牛手裡,黃牛加上了驗證然後買了一把票,等到你自己買票的時候網站提示你: “ 你已經有票了,別老買票!"這是什麼感覺嗎?到時候那真是叫天天不應、叫地地不靈了。
  • 退的票不是立即就可以買票而是所有退票都統一時間處理。比如3天前退的票都在發車3天前的某一個時刻放出,3天內的票就當日或次日 12:00 放出,這樣黃牛就沒法偷偷地把票轉移到客戶手裡。(這個功能12306在著手做,退票已經不是馬上出票了)

四、如何防止自動刷票

好吧這是最麻煩的。換句話說,就是如何讓不同使用者公平的搶票,而不會因為有了某種工具就比別人容易搶票,甚至不會因為手慢就搶不到票 (當然這個很難)。

到了這裡黃牛囤積的概率應該已經大大減小了,如果能把這一步也禁止了,那麼黃牛應該就只能回到最原始的方案 (也就是帶著乘客從出口往裡跑,硬生生摸進去)。到這裡圖片驗證碼才開始登場,這也是秒殺方案要考慮的地方。圖片驗證碼的作用就是防止機器能在開搶0.1s 之內就買到票了。普通使用者要2~4s,如果機器不能快速識別圖片驗證碼,那麼加上驗證碼之後所有人的反應速度都在4~10s 左右,這就公平了。當然驗證碼是永遠防不了機器的,不考慮機器直接識別的情況,有一個方案叫做人工打碼,機器呼叫一些人工打碼介面,不過速度不快,刷一天也許才能弄到票。這速度和普通人差不多,也算是做到了基本公平。

五、開一下腦洞歡迎小夥伴們一起開腦洞哦~

那麼我們有沒有什麼代替驗證碼的方案也能讓機器出局,大家都比較公平呢?接下來就是腦洞大開的時候:

  • 既然要公平那麼可不可以這樣考慮,一批車票不一次性放出來而是考慮在一個小時內分15次,放出來每次都是一個小的"抽售",在這 4min 內只要申請一下,在放票的時候就可以參與抽獎。抽中了就獲得了有 45min 鎖定時間的票。在一個小時放票時間沒搶的票就繼續按照現有邏輯唄~
  • 大量買票的使用者群體其實很有限,只有少數是經常出去玩的使用者,那剩下的呢?一些是黃牛,還有一些是某哪兒等等之類的網站 (很多時候12306沒票,在某哪兒就有)。那麼這樣的使用者可以採用嚴格的驗證策略。這是一個煙霧彈 (採用了嚴格的策略又不提示),這樣會讓他們以為整個網站都很嚴格,可以為等多優化爭取到時間。
  • 開放第三方介面,允許其他平臺查詢而不是抓取,允許登陸後預約票。這樣可以減輕很多開發壓力和輿論壓力。現在這麼多購票軟體和購票瀏覽器,一下都給弄死了這得引起多大的反彈。為了防止這種情況可以考慮給個介面引導這類app、 瀏覽器轉型給個生路大小都好過年。

六、建立良好的公眾形象

其實現在12306做的還是挺良心的,介面清晰、功能基本沒有 bug。出了個高階一點的驗證功能——圖片驗證碼卻被黑出了新的巔峰,其實仔細想一下就知道此舉旨在也是保證大多數人的搶票權益。12306目前主要是和黃牛作鬥爭,這是他的命門,只要能讓使用者買到票,這就是好的使用者體驗!其他都不重要。也別總說12306拿錢不辦事、職工傻,給阿里就肯定能弄好,這根本不可能的,不辦事的國企早就都倒閉了,扯淡的人請先用一下腦子。

另外不知道大家有沒有想過一點,為什麼一個圖片驗證碼會引發這麼多吐槽,難道真的因為選C罩杯或者一排頭像選矮子的驗證碼的出現的非常多? 不知道大家是否還記得校車事故發生後引發強大的輿論譴責。也許大家認為譴責過後山區的人們從此就過上了幸福的生活……可事實卻是,經過這場聲勢浩大的輿論譴責後,不靠譜的小麵包校車直接停運,結果就是山區學生上學負擔變得更沉重了: 他們要麼選擇放棄讀書了,要麼就是父母一方放棄賺錢凌晨4:00騎摩托車走十幾公里的山路去送孩子上學。請問大家的譴責是否真的幫助到了山區的小孩,誰才是真的受益者呢?(其實受益人就是在山裡辦所謂希望小學騙贊助的人,當然這個也許只是子虛烏有)

同樣的事例不甚列舉,還有60年左右以前的韓國。當時韓國準備自己辦奶牛養殖行業,因為國內牛奶行業進口量超高。這時候主要出口國美國就不樂意了,於是就開始化做良知,操心起了韓國人民的身體健康,開始說韓國的奶牛衛生不達標、會有害健康。當時的韓國總統堅持自己辦養牛業,然後就在輿論的壓力下就下臺了。最後韓國國內養殖業倒閉,輿論造成的結果就是: 國內的牛奶等價格翻了好幾倍 (這不廢話,壟斷加海運肯定比本地的貴呀) 這件事情受益的又是誰?

最後補充一個事例,知乎上看到的,具體記得不是很清楚了。是說某國石油原本是壟斷,後來迫於輿論壓力市場化,結果質量暴降,接著就引發合格石油價格大大上升 (這肯定的吧,石油需要大規模裝置才能生產處優質石油)。這個收益的人是誰就更不知道了。

現在看來12306的事情和以上三個案例都非常像,如果12306真的迫於輿論壓力做不下去了,鐵路市場化。那麼受益人又是誰?反正我覺得不是我!(當然啦,這事也輪不到我說,大家看看前面的產品分析部分就好了)。

我是 PM茶館 的程式猿?,這原來是一篇回答如何重新設計一個12306購票系統的,現在應鼓勵師 @夏然 的邀請,就整理了一篇文章出來。

本文由PMCAFF產品經理社群作者@lin  原創,未經允許禁止轉載。