Swift生成OTP程式
OTP,即一次性密碼,是一個自動生成的隨機數字字串,用於數字裝置上的單個登入會話或交易。它通常用於透過提供額外的身份驗證來增強安全性。例如,“423193”、“489201”等。為了生成OTP,Swift提供了以下方法:
使用random()方法
使用randomElement()方法
方法一:使用random()方法
眾所周知,OTP是一個隨機生成的字串。因此,為了生成隨機字串,Swift提供了一個名為random()的內建函式。它用於建立指定範圍內的隨機字串。
語法
func random(in: Range)
此處,random函式只接受一個引數,即範圍。它表示建立隨機值的範圍。其值不能為空。
演算法
步驟1 - 建立一個生成OTP的函式。
步驟2 - 在函式內部,我們建立一個包含數字0-9的字串。
步驟3 - 指定OTP的長度。
步驟4 - 建立一個空字串來儲存OTP。
步驟5 - 執行for-in迴圈以迭代給定長度,並從給定的字元集中隨機選擇字元。
步驟6 - 將隨機選擇的字元新增到新字串中。
步驟7 - 返回最終的OTP。
步驟8 - 呼叫函式以生成OTP。
步驟9 - 顯示輸出。
示例
在下面的Swift程式中,我們將生成一個OTP。為此,我們定義一個返回OTP的函式。此函式建立一個包含數字0-9的字串,並將OTP的長度設定為6。然後,它迭代給定長度,並使用Int.random()函式從給定的字元集中隨機選擇字元,並將每個隨機選擇的字元逐一新增到新字串中,直到達到所需的長度。最後,返回新的OTP。
import Foundation import Glibc func createOTP() -> String { let numbers = "0123456789" let size = 6 var resOTP = "" for _ in 0..<size { let randomIndexValue = Int.random(in: 0..<numbers.count) let numChar = numbers[numbers.index(numbers.startIndex, offsetBy: randomIndexValue)] resOTP.append(numChar) } return resOTP } let finalOTP = createOTP() print("New generated OTP is:", finalOTP)
輸出
New generated OTP is: 311579
方法二:使用randomElement()方法
Swift提供了一個名為randomElement()的內建函式,使用此函式我們可以隨機生成OTP,因為此函式從給定的序列或集合中返回一個隨機元素。
語法
func randomElement()
它返回隨機元素。如果給定的集合為空,則返回nil。
演算法
步驟1 - 建立一個生成OTP的函式。
步驟2 - 在函式內部,我們建立一個包含數字0-9的字串。
步驟3 - 指定OTP的長度。
步驟4 - 使用randomElement()函式從字串中選擇隨機字元,並使用compactMap()函式將其對映到陣列中。
步驟5 - 透過將陣列轉換為字串來返回OTP。
步驟6 - 呼叫函式以生成OTP。
步驟7 - 顯示輸出。
示例
在下面的Swift程式中,我們將生成一個OTP。為此,我們定義一個返回OTP的函式。此函式建立一個包含數字0-9的字串,並將OTP的長度設定為6。然後,它迭代給定長度,並使用randomElement()函式從給定的字元集中隨機選擇字元,並使用compactMap()方法將它們逐一對映到陣列中,直到達到所需的長度。最後,使用String()初始化器將陣列轉換為字串來返回新的OTP。
import Foundation import Glibc func createOTP() -> String { let numbers = "0123456789" let otpLen = 6 let newOTP = (0..<otpLen).compactMap { _ in numbers.randomElement() } return String(newOTP) } let newOTP = createOTP() print("New OTP is: \(newOTP)")
輸出
New OTP is: 545351
結論
這就是我們生成OTP的方式。OTP通常用於身份驗證和驗證,例如雙因素身份驗證、帳戶驗證、交易授權、密碼重置等。它基於時間演算法,為每個身份驗證會話生成唯一的密碼。它不會在同一個身份驗證會話中多次使用,並且僅在特定登入或交易的指定時間內有效。