欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

德國(guó)計(jì)算機(jī)科學(xué)家 Hans Peter Luhn 在 1960 年代開發(fā)了 Luhn 算法公式。 它是 Visa 和 Master Card 等主要國(guó)際金融電子資金轉(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)來(lái)迭代列表中的數(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)算符 :: 來(lái)實(shí)現(xiàn)的。

例如,在語(yǔ)法 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)和來(lái)對(duì)所有數(shù)字求和。 使用以下語(yǔ)法計(jì)算奇數(shù)位的總和:

checksum += sum(odd_digits)

創(chuàng)建一個(gè) for 循環(huán)來(lái)迭代偶數(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),無(wú)論是偶數(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 算法來(lái)驗(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 語(yǔ)句一次計(jì)算整個(gè)操作。

使用語(yǔ)法 (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) 語(yǔ)法將 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ù)字。

建議讀者通讀文章,嘗試自己編寫代碼,然后回來(lái)尋求提示。 這樣,讀者可以創(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)文章

  • Python 操作MySQL詳解及實(shí)例

    Python 操作MySQL詳解及實(shí)例

    這篇文章主要介紹了Python 操作MySQL詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Python可視化函數(shù)plt.scatter詳解

    Python可視化函數(shù)plt.scatter詳解

    這篇文章主要介紹了Python可視化函數(shù)plt.scatter詳解,?關(guān)于matplotlib的scatter函數(shù)有許多活動(dòng)參數(shù),如果不專門注解,是無(wú)法掌握精髓的,本文專門針對(duì)scatter的參數(shù)和調(diào)用說起,并配有若干案例,需要的朋友可以參考下
    2023-04-04
  • django實(shí)現(xiàn)web接口 python3模擬Post請(qǐng)求方式

    django實(shí)現(xiàn)web接口 python3模擬Post請(qǐng)求方式

    今天小編就為大家分享一篇django實(shí)現(xiàn)web接口 python3模擬Post請(qǐng)求方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-11-11
  • python時(shí)間日期函數(shù)與利用pandas進(jìn)行時(shí)間序列處理詳解

    python時(shí)間日期函數(shù)與利用pandas進(jìn)行時(shí)間序列處理詳解

    python標(biāo)準(zhǔn)庫(kù)包含于日期(date)和時(shí)間(time)數(shù)據(jù)的數(shù)據(jù)類型,datetime、time以及calendar模塊會(huì)被經(jīng)常用到,而pandas則可以對(duì)時(shí)間進(jìn)行序列化排序
    2018-03-03
  • 在SAE上部署Python的Django框架的一些問題匯總

    在SAE上部署Python的Django框架的一些問題匯總

    這篇文章主要介紹了在SAE上部署Python的Django框架的一些問題匯總,SAE是新浪的一個(gè)在線APP部署平臺(tái),并且對(duì)Python應(yīng)用提供相關(guān)支持,需要的朋友可以參考下
    2015-05-05
  • 詳解python的字典及相關(guān)操作

    詳解python的字典及相關(guān)操作

    本文主要介紹了python的字典及相關(guān)操作,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 使用python實(shí)現(xiàn)一個(gè)瀏覽器自動(dòng)化的腳本

    使用python實(shí)現(xiàn)一個(gè)瀏覽器自動(dòng)化的腳本

    最近工作中有這樣一個(gè)需求:客戶反饋在瀏覽器操作過程中,重復(fù)流程操作太頻繁,能不能讓瀏覽器自動(dòng)操作完成?所以本文給大家介紹了如何使用python實(shí)現(xiàn)一個(gè)瀏覽器自動(dòng)化的腳本,感興趣的朋友可以參考下
    2024-04-04
  • pytorch 同步機(jī)制的實(shí)現(xiàn)

    pytorch 同步機(jī)制的實(shí)現(xiàn)

    在PyTorch中,當(dāng)多個(gè)算子和內(nèi)核被并行執(zhí)行時(shí),PyTorch 通過 CUDA 的流和事件機(jī)制來(lái)管理并發(fā)和同步,本文就來(lái)介紹一下pytorch 同步機(jī)制,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • 使用python socket分發(fā)大文件的實(shí)現(xiàn)方法

    使用python socket分發(fā)大文件的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇使用python socket分發(fā)大文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-07-07
  • 簡(jiǎn)單介紹Python中的len()函數(shù)的使用

    簡(jiǎn)單介紹Python中的len()函數(shù)的使用

    這篇文章主要簡(jiǎn)單介紹了Python中的len()函數(shù)的使用,包括在四種情況下的使用小例子,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-04-04

最新評(píng)論