最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在Python?中使用?Luhn?算法驗(yàn)證數(shù)字

 更新時(shí)間:2023年06月19日 10:36:06   作者:跡憶客  
Luhn 算法驗(yàn)證器有助于檢查合法數(shù)字并將其與不正確或拼寫錯(cuò)誤的輸入分開,這篇文章主要介紹了在Python中使用Luhn算法驗(yàn)證數(shù)字,需要的朋友可以參考下

德國計(jì)算機(jī)科學(xué)家 Hans Peter Luhn 在 1960 年代開發(fā)了 Luhn 算法公式。 它是 Visa 和 Master Card 等主要國際金融電子資金轉(zhuǎn)賬組織使用的一種校驗(yàn)和算法,用于加快在線支付和交易速度。

這篇文章解釋了用 Python 編寫 Luhn 算法并根據(jù)算法驗(yàn)證數(shù)字。

在 Python 中使用 Luhn 算法驗(yàn)證數(shù)字

Luhn 算法驗(yàn)證器有助于檢查合法數(shù)字并將其與不正確或拼寫錯(cuò)誤的輸入分開。

讓我們了解如何使用 Python 中的 Luhn 算法創(chuàng)建一個(gè)驗(yàn)證數(shù)字的程序。

使用函數(shù)通過 Luhn 算法驗(yàn)證數(shù)字

該程序接受一個(gè)數(shù)字并使用 Python 中的 Luhn 算法對(duì)其進(jìn)行驗(yàn)證。 該程序具有三個(gè)方法 - separate_digits()、luhn_algo() 和 check_if_valid。

分步說明:

1.第一行代碼創(chuàng)建一個(gè)帶有參數(shù) num 的方法 luhn_algo。在該方法內(nèi)部,創(chuàng)建了另一個(gè)嵌套方法 separate_digits()。 此嵌套方法將傳遞給它的數(shù)字的數(shù)字分開,并將分開的數(shù)字作為 Python 列表返回。

2.該方法使用 for 循環(huán)來迭代列表中的數(shù)字。

def luhn_algo(num):
def separate_digits(n):
return [int(d) for d in str(n)]

1.新變量 digits 使用 separate_digits 方法將 num 內(nèi)的值轉(zhuǎn)換為數(shù)字列表。

digits = separate_digits(num)

1.一旦數(shù)字存儲(chǔ)在 Python 列表中,就需要反轉(zhuǎn)列表,并且需要將偶數(shù)和奇數(shù)分開。 這是通過使用切片運(yùn)算符 :: 來實(shí)現(xiàn)的。

例如,在語法 odd_digits = digits[-1::-2] 中,-1:: 反轉(zhuǎn)列表并采用第一個(gè)索引。

::-2 從第一個(gè)索引開始每隔一個(gè)元素拾取一次。 這將創(chuàng)建一個(gè)只有奇數(shù)位的新列表。

同樣,偶數(shù)位列表是使用運(yùn)算符 -2::-2 創(chuàng)建的。

digits = separate_digits(num)
odd_digits = digits[-1::-2]
even_digits = digits[-2::-2]

1.Luhn算法是奇數(shù)位相加,偶數(shù)位乘以2后相加。

如果偶數(shù)位的乘積大于 9,則將它們的位數(shù)相加。 最后,將所有奇數(shù)和偶數(shù)加在一起。

創(chuàng)建一個(gè)變量校驗(yàn)和來對(duì)所有數(shù)字求和。 使用以下語法計(jì)算奇數(shù)位的總和:

checksum += sum(odd_digits)

創(chuàng)建一個(gè) for 循環(huán)來迭代偶數(shù)位列表。 這樣每個(gè)數(shù)字都乘以2,然后separate_digits方法將乘積的數(shù)字分開,然后計(jì)算它們的和。

最后,它被添加到變量校驗(yàn)和中。

for d in even_digits:
checksum += sum(separate_digits(d * 2))

要通過 Luhn 算法驗(yàn)證的數(shù)字,其最終產(chǎn)品必須能被 10 整除。結(jié)果的值在方法結(jié)束時(shí)返回。

return checksum % 10

為了驗(yàn)證 Luhn 算法的結(jié)果,創(chuàng)建了一個(gè)帶有參數(shù) num 的方法 check_if_valid。 該方法使用權(quán)益運(yùn)算符檢查方法 luhn_algo 返回的結(jié)果是否等于零并返回結(jié)果。

def check_if_valid(num):
   return luhn_algo(num) == 0

為了打印結(jié)果,將一個(gè)數(shù)字傳遞給方法 check_if_valid,然后打印結(jié)果。

代碼:

def luhn_algo(num):
    print("Number = ", num)
    def separate_digits(n):
        # Separates digits of num and stores them in a python list
        return [int(d) for d in str(n)]
    digits = separate_digits(num)
    odd_digits = digits[-1::-2]  # Creates a new reversed list with just odd digits
    even_digits = digits[-2::-2]  # Creates another reversed list with even digits
    checksum = 0
    checksum += sum(odd_digits)  # Finds sum of odd digits
    for d in even_digits:
        checksum += sum(separate_digits(d * 2))  # Multiplies even digits with 2 and sums digits > 9
    return checksum % 10
def check_if_valid(num):
    return luhn_algo(num) == 0
result = check_if_valid(4532015112830366)
print('Correct:' + str(result))
result = check_if_valid(6011514433546201)
print('Correct:' + str(result))
result = check_if_valid(6771549495586802)
print('Correct:' + str(result))

輸出:

Number = 4532015112830366
Correct:True
Number = 6011514433546201
Correct:True
Number = 6771549495586802
Correct:True

這樣,可以輕松創(chuàng)建一個(gè)程序,使用 Python 中的 Luhn 算法驗(yàn)證數(shù)字。

使用嵌套循環(huán)通過 Luhn 算法驗(yàn)證數(shù)字

在 Python 中通過 Luhn 算法驗(yàn)證數(shù)字的另一種方法是使用嵌套循環(huán)。 該程序使用單個(gè)函數(shù)通過 Python 中的 Luhn 算法驗(yàn)證數(shù)字。

讓我們了解代碼的工作原理。

1.第一行代碼創(chuàng)建一個(gè)帶有參數(shù) num 的方法 luhn_algo。

2.變量 check_sum 初始化為零。

def luhn_algo(num):
   check_sum = 0

變量 num_parity 查找給定數(shù)字的長(zhǎng)度并檢查其奇偶校驗(yàn),無論是偶數(shù)還是奇數(shù)。

num_parity = len(num) % 2

創(chuàng)建一個(gè) for 循環(huán),從它的第 0 個(gè)位置向后運(yùn)行到它的長(zhǎng)度。 第 l 個(gè)索引的值被復(fù)制初始化為變量 j。

for l in range(len(num) - 1, -1, -1):
	   j = int(num[l])

1.變量 num_parity 就在此時(shí)出現(xiàn)。 如果 num_parity 為零,這意味著 num 是偶數(shù),反之亦然。

由于所有偶數(shù)位都需要乘以 2,因此程序檢查其第 l+1 個(gè)索引的奇偶性。 假設(shè)奇偶校驗(yàn)為 0,l + 1 % 2 等于奇偶校驗(yàn),則表示第 l 個(gè)索引為奇數(shù)。

同樣,如果奇偶校驗(yàn)為 0 且不等于 l + 1 % 2,則為偶數(shù)。 通過使用此邏輯,每個(gè)偶數(shù)位都乘以 2,如果乘積大于 9,則除以 9。

check_sum 變量用 j 的值自增。 在循環(huán)迭代結(jié)束時(shí),check_sum 計(jì)算偶數(shù)和奇數(shù)的最終和。

if (l + 1) % 2 != num_parity:
    j = j * 2
    if j > 9:
        j = j - 9
    check_sum = check_sum + j

眾所周知,最終的總和需要被 10 整除才能使用 Python 中的 Luhn 算法進(jìn)行驗(yàn)證,因此該函數(shù)返回 check_sum % 10 == 0。

代碼:

def luhn_algo(num):
    check_sum = 0
    num_parity = len(num) % 2
    for l in range(len(num) - 1, -1, -1):
        j = int(num[l])
        if (l + 1) % 2 != num_parity:
            j = j * 2
        if j > 9:
            j = j - 9
        check_sum = check_sum + j
    print("value calculated = ", str(check_sum))
    return check_sum % 10 == 0
for n in (49927398716, 49927398717, 1234567812345678, 1234567812345670):
    print(str(n) + " =>", luhn_algo(str(n)))

輸出:

value calculated = 70
49927398716 => True
value calculated = 71
49927398717 => False
value calculated = 68
1234567812345678 => False
value calculated = 60
1234567812345670 => True

使用函數(shù)式編程通過 Luhn 算法驗(yàn)證數(shù)字

前兩個(gè)示例使用程序方法通過 Python 中的 Luhn 算法驗(yàn)證數(shù)字。 此示例使用函數(shù)式編程在 Python 中使用 Luhn 算法來驗(yàn)證數(shù)字。

1.使用函數(shù)式編程方法可以節(jié)省程序員的時(shí)間和精力。 下面的 Python 程序用更少的代碼行驗(yàn)證了一個(gè)數(shù)字。

2.使用參數(shù) num 創(chuàng)建方法 luhn_algo。在新變量 rev 中,參數(shù) num 中的數(shù)字存儲(chǔ)在列表中。 for 循環(huán)用于此目的,它迭代 num 中的位數(shù)。切片運(yùn)算符 ::-1 反轉(zhuǎn)列表中的數(shù)字。

3.return 語句一次計(jì)算整個(gè)操作。

使用語法 (sum(rev[0::2]) 計(jì)算奇數(shù)位的總和。偶數(shù)位在 for 循環(huán)中運(yùn)行(for d in r[1::2])。

每個(gè)數(shù)字乘以 2,乘積的數(shù)字使用 divmod() 函數(shù)相加。

divmod() 函數(shù)接受兩個(gè)參數(shù)——分子和分母,并返回兩個(gè)值——商和余數(shù)。

divmod(d * 2, 10) 語法將 d*2 作為分子,將 10 作為分母。 結(jié)果相加得到位數(shù)之和。

最后,該函數(shù)檢查最終總和是否可以被 10 整除并返回結(jié)果。

4.使用 for 循環(huán),提供四個(gè)數(shù)字作為輸入,并打印結(jié)果。

代碼:

def luhn_algo(num):
    rev = [int(ch) for ch in str(num)][::-1]
    return (sum(rev[0::2]) + sum(sum(divmod(d * 2, 10)) for d in rev[1::2])) % 10 == 0
for num2 in (49927398716, 49927398717, 1234567812345678, 1234567812345670):
    print(num2, luhn_algo(num2))

輸出:

49927398716 True
49927398717 False
1234567812345678 False
1234567812345670 True

總結(jié)

本文提供了三個(gè)程序,讓讀者了解如何在 Python 中使用 Luhn 算法驗(yàn)證數(shù)字。

建議讀者通讀文章,嘗試自己編寫代碼,然后回來尋求提示。 這樣,讀者可以創(chuàng)建使用 Luhn 算法驗(yàn)證數(shù)字的程序。

到此這篇關(guān)于在Python中使用Luhn算法驗(yàn)證數(shù)字的文章就介紹到這了,更多相關(guān)PythonLuhn算法驗(yàn)證數(shù)字內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 新手學(xué)python應(yīng)該下哪個(gè)版本

    新手學(xué)python應(yīng)該下哪個(gè)版本

    在本篇內(nèi)容中小編給大家整理的是關(guān)于新手學(xué)python應(yīng)該下版本的相關(guān)知識(shí)點(diǎn),需要的朋友們可以參考學(xué)習(xí)下。
    2020-06-06
  • Python的批量遠(yuǎn)程管理和部署工具Fabric用法實(shí)例

    Python的批量遠(yuǎn)程管理和部署工具Fabric用法實(shí)例

    這篇文章主要介紹了Python的批量遠(yuǎn)程管理和部署工具Fabric用法,實(shí)例分析了Fabric的功能與具體使用方法,需要的朋友可以參考下
    2015-01-01
  • 基于Python的Houdini插件開發(fā)過程詳情

    基于Python的Houdini插件開發(fā)過程詳情

    這篇文章主要介紹了基于Python的Houdini插件開發(fā)過程詳情,Houdini是基于QT進(jìn)行的開發(fā),支持?Python、HScript二種腳本進(jìn)行插件開發(fā),下面文章介紹內(nèi)容,需要的朋友可以參考一下
    2022-02-02
  • python def 定義函數(shù),調(diào)用函數(shù)方式

    python def 定義函數(shù),調(diào)用函數(shù)方式

    這篇文章主要介紹了python def 定義函數(shù),調(diào)用函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python基于gevent實(shí)現(xiàn)并發(fā)下載器代碼實(shí)例

    python基于gevent實(shí)現(xiàn)并發(fā)下載器代碼實(shí)例

    這篇文章主要介紹了python基于gevent實(shí)現(xiàn)并發(fā)下載器代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python中csv文件的寫入與讀取方法例子

    Python中csv文件的寫入與讀取方法例子

    這篇文章主要給大家介紹了關(guān)于Python中csv文件的寫入與讀取方法的相關(guān)資料,csv是"Comma-Separated Values(逗號(hào)分割的值)"的首字母縮寫,它其實(shí)和txt文件一樣,都是純文本文件,使用Python來讀寫csv文件是非常容易的,需要的朋友可以參考下
    2023-09-09
  • Python 如何實(shí)現(xiàn)訪問者模式

    Python 如何實(shí)現(xiàn)訪問者模式

    這篇文章主要介紹了Python 如何實(shí)現(xiàn)訪問者模式,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之雙端隊(duì)列詳解

    Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之雙端隊(duì)列詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)與算法之雙端隊(duì)列,詳細(xì)講述了雙端隊(duì)列的概念、功能、定義及Python實(shí)現(xiàn)與使用雙端隊(duì)列的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • PyTorch一小時(shí)掌握之基本操作篇

    PyTorch一小時(shí)掌握之基本操作篇

    這篇文章主要介紹了PyTorch一小時(shí)掌握之基本操作篇,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • python爬蟲基礎(chǔ)之urllib的使用

    python爬蟲基礎(chǔ)之urllib的使用

    這篇文章主要介紹了python爬蟲基礎(chǔ)之urllib的使用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論

法库县| 汉阴县| 英山县| 古蔺县| 剑川县| 文水县| 萨嘎县| 修文县| 阳山县| 云南省| 蕲春县| 苏州市| 辉南县| 新绛县| 城市| 莆田市| 巴南区| 资中县| 宁化县| 油尖旺区| 搜索| 宜君县| 宜昌市| 吉安市| 南和县| 宁蒗| 江油市| 新巴尔虎左旗| 彭水| 长丰县| 乌鲁木齐县| 仙桃市| 天镇县| 沅江市| 萨嘎县| 卢龙县| 西华县| 太保市| 莱西市| 个旧市| 公主岭市|