首頁 > web前端 > js教程 > 代碼日/日:信用卡驗證器挑戰

代碼日/日:信用卡驗證器挑戰

DDD
發布: 2024-09-18 15:08:36
原創
763 人瀏覽過

Day /  Days of Code: Credit Card Validator Challenge

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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板