2024 年 9 月 15 日星期日
本週都是關於程式碼挑戰的,這真是太棒了!一個有趣的挑戰是使用 Luhn 演算法實現信用卡驗證器,該演算法可以防止單位數信用卡錯誤和相鄰換位(例如 90 > )。 09. 寫 Luhn 演算法是完全可以實現的;讓我們來看看我的實作。
首先,讓我們花點時間了解函數式程式設計(FP)是什麼。信用卡號驗證可以是直接應用於信用卡號變數的方法,而不是使用將信用卡號排隊測試的命令式函數。這種模組化方法增加了程式碼的價值,因為它可以以更多方式使用而無需重寫。 FP 的一個副作用是數據成為明星,而不是函數,這看起來非常精簡。
首先,我們將使用符合 FP 範式的箭頭函數。這在單行函數中更重要,但仍然很實用。
留出最後一位數字:Luhn 演算法的第一步是將最後一位數字留出到我們命名為 lastDigit 的變數中。這遵循使用陣列長度 - 1 存取陣列元素的標準方法,因為陣列從 0 開始元素編號。 JavaScript 很好地為陣列原生提供了此功能。
反轉數組:Luhn 演算法從右到左處理信用卡數字。為了簡單起見,我們將反轉數組。 JavaScript 提供了兩種方法來簡化此操作:slice 用於選擇第一個到倒數第二個元素,reverse 用於反轉數組中元素的順序。我們將其指派給一個名為 allExceptLastReversed 的新陣列。
將每個其他元素加倍:下一步需要比 JavaScript 的迭代方法提供的更精細的陣列元素迭代控制,因此我們將使用傳統的 for 迴圈。此步驟涉及將所有其他數組元素加倍,如果該值大於 9,則減去 9。
對元素求和並驗證:現在我們快完成了。我們想要對所有陣列元素求和,並驗證它們是否能被 10 整除。 JavaScript 有一個名為「reduce」的迭代方法,該方法將函數(通常是求和或乘積)應用於陣列中的每個元素並累積結果。在這裡,我們將對反轉的切片數組元素求和,加入最後一位數字,並檢查模 10 的總和是否為 0。
JavaScript 也提供了邏輯比較,以評估 true 或 false,稱為布林值,即函數傳回值。 JavaScript 讓程式設計變得近乎藝術。
這個挑戰是深入研究函數式和命令式程式設計範例的絕佳方式。它強調了編寫模組化、可重複使用程式碼的重要性。當我繼續我的 100 天程式設計之旅時,我很高興能夠應對更多挑戰並擴展我對不同程式設計概念的理解。每一天都會帶來新的學習和成長的機會,我迫不及待地想看看這段旅程下一步將帶我去往何方。
請繼續關注更多更新,祝您編碼愉快! ?
這是完整的程式碼:
const validateCred = (cardNumber) => { const lastDigit = cardNumber[cardNumber.length - 1]; let allExceptLastReversed = cardNumber.slice(0, -1).reverse(); for (let i = 0; i < allExceptLastReversed.length; i += 2) { allExceptLastReversed[i] *= 2; if (allExceptLastReversed[i] > 9) { allExceptLastReversed[i] -= 9; } } const sum = allExceptLastReversed.reduce((acc, curr) => acc + curr, 0) + lastDigit; // sum all digits return (sum % 10 === 0); };
交叉發布:Dev https://dev.to/jacobsternx 和 LinkedIn https://www.linkedin.com/in/jacobsternx
以上是代碼日/日:信用卡驗證器挑戰的詳細內容。更多資訊請關注PHP中文網其他相關文章!