」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 代碼日:信用卡驗證器挑戰

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

發佈於2024-11-05
瀏覽:703

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也提供了邏輯比較,以評估真或假,稱為布林值,這是函數的傳回值。 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

版本聲明 本文轉載於:https://dev.to/jacobsternx/day-77-100-days-of-code-credit-card-validator-challenge-93m?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-07-18
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-07-18
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-07-18
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-07-18
  • 在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    在Ubuntu/linux上安裝mysql-python時,如何修復\“ mysql_config \”錯誤?
    mysql-python安裝錯誤:“ mysql_config找不到”“ 由於缺少MySQL開發庫而出現此錯誤。解決此問題,建議在Ubuntu上使用該分發的存儲庫。使用以下命令安裝Python-MysqldB: sudo apt-get安裝python-mysqldb sudo pip in...
    程式設計 發佈於2025-07-18
  • Java中假喚醒真的會發生嗎?
    Java中假喚醒真的會發生嗎?
    在Java中的浪費喚醒:真實性或神話? 在Java同步中偽裝喚醒的概念已經是討論的主題。儘管存在這種行為的潛力,但問題仍然存在:它們實際上是在實踐中發生的嗎? Linux的喚醒機制根據Wikipedia關於偽造喚醒的文章,linux實現了pthread_cond_wait()功能的Linux實現,...
    程式設計 發佈於2025-07-18
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-07-18
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&華儀的函數時,在接受成員函數指針的函數時,要在函數上既要提供指針又可以提供指針和指針到函數的函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此...
    程式設計 發佈於2025-07-18
  • 如何使用Depimal.parse()中的指數表示法中的數字?
    如何使用Depimal.parse()中的指數表示法中的數字?
    在嘗試使用Decimal.parse(“ 1.2345e-02”中的指數符號表示法表示的字符串時,您可能會遇到錯誤。這是因為默認解析方法無法識別指數符號。 成功解析這樣的字符串,您需要明確指定它代表浮點數。您可以使用numbersTyles.Float樣式進行此操作,如下所示:[&& && && ...
    程式設計 發佈於2025-07-18
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-07-18
  • 如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    如何將PANDAS DataFrame列轉換為DateTime格式並按日期過濾?
    Transform Pandas DataFrame Column to DateTime FormatScenario:Data within a Pandas DataFrame often exists in various formats, including strings.使用時間數據時...
    程式設計 發佈於2025-07-18
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-07-18
  • 如何實時捕獲和流媒體以進行聊天機器人命令執行?
    如何實時捕獲和流媒體以進行聊天機器人命令執行?
    在開發能夠執行命令的chatbots的領域中,實時從命令執行實時捕獲Stdout,一個常見的需求是能夠檢索和顯示標準輸出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    程式設計 發佈於2025-07-18
  • 在Python中如何創建動態變量?
    在Python中如何創建動態變量?
    在Python 中,動態創建變量的功能可以是一種強大的工具,尤其是在使用複雜的數據結構或算法時,Dynamic Variable Creation的動態變量創建。 Python提供了幾種創造性的方法來實現這一目標。 利用dictionaries 一種有效的方法是利用字典。字典允許您動態創建密鑰並...
    程式設計 發佈於2025-07-18
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-07-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3