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也提供了邏輯比較,以評估真或假,稱為布林值,這是函數的傳回值。 JavaScript 讓程式設計變得近乎藝術。
這個挑戰是深入研究函數式和命令式程式設計範例的絕佳方式。它強調了編寫模組化、可重複使用程式碼的重要性。當我繼續我的 100 天程式設計之旅時,我很高興能夠應對更多挑戰並擴展我對不同程式設計概念的理解。每一天都會帶來新的學習和成長機會,我迫不及待地想看看這段旅程下一步將帶我去哪裡。
請繼續關注更多更新,祝您編碼愉快! ?
完整程式碼如下:
const validateCred = (cardNumber) => { const lastDigit = cardNumber[cardNumber.length - 1]; let allExceptLastReversed = cardNumber.slice(0, -1).reverse(); for (let i = 0; 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
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3