5

假設您有一個系統,可以通過電子郵件或紙張將相當長的關鍵值準確地傳達給用戶,但用戶需要能夠通過電話閱讀,或通過閱讀並將其鍵入其他界面,從而準確地將密鑰傳回給您。編碼,最大限度地減少誤讀/ mistyping/misspeaking?

什麼是「好」的方式來編碼的密鑰,使閱讀/聽力/打字很容易&準確?

這可能是發票號碼,文檔ID,交易ID或其他抽象值。我們先來說說這次討論的基礎鍵值是一個大數目的緣故,說是40個位數10爲基數

的幾點思考:

較短的鍵通常更好

  • 40 -digit基數10的值可能不符合給定的空間,並且容易在
  • 的中間丟失
  • 相同的值可以用基數16表示在33-34位的數字中
  • 相同的值可能在底座36中26個數字
  • 來表示相同的值可在基座64中22-23位數字

字符不能在視覺上相互混淆表示更好

  • 例如包含O(oh)和0(零)或S(ess)和5(五)的編碼可能很差
  • 此問題取決於用於顯示密鑰的字體/能夠在某些情況下進行控制(如在紙上打印),但無法控制其他人(如網頁和電子郵件)。
  • 還取決於您是否可以控制大寫和/或小寫的獨佔使用 - 例如,資本D(迪)可能看起來像O(哦),但小寫d(迪)不會;而小寫l(ell)看起來像1(一),而大寫L(ell)不會。 (對於特殊的字體/臉部例外)。

字符不能口頭/聽覺上相互混淆更好

  • 一個(AY)8(8)
  • B(蜜蜂)C(CEE)d(DEE) E(ee)g(gee)p(pee)t(tee)v(vee)z(zee)3(三)
  • 此問題取決於端到端信道的音頻質量 - 更大的挑戰如果預期的用戶羣可能存在語音障礙,或者可能不得不通過防毒面具說話,或者通信信道可能包括CB無線電或者不穩定的VOIP電話系統。

添加一個或兩個校驗位將檢測錯誤,但無法幫助解決錯誤。

alpha - bravo - charlie - delta類型的對話框可以幫助識別錯誤,但不會讀取錯誤。

編碼的可能的選擇:

  • 基本64 - 緊湊,但太多難以用語言表達的字符(下劃線,破折號等等)
  • 基座34 - 0-9和AZ,但用O(oh)和I(aye)遺漏,因爲最易與數字混淆
  • 基數32 - 與基數34相同,但省略了0(零)和1(一個)

I那裏有一個公認的編碼方式,對於這種情況是一個合理的解決方案?

+1

使用ICAO(http://en.wikipedia.org/wiki/NATO_phonetic_alphabet)? – ninjalj 2012-03-09 18:46:19

回答

相關問題