信用卡号验证_潭底小虾的博客-程序员宅基地

技术标签: 编程语言基础  

分类:

1、开头一位是4,则是 ‘Visa Card' 

2、开头两位是50或者67或者58或者63,则是‘Maestro Card'

3、开头是一位是5,则是’Master Card' 

4、开头两位是37,则是'American Express Card'

5、开头两位是62,则是‘Unionpay Card'

6、开头一位是6,则是‘Discover Card'

7、开头两位是35,则是‘JCB Card'

8、开头一位是7,则是‘ Gasoline Card'

长度:

卡号的长度必须是13到19位之间

卡号:

1、将卡号反转

2、将偶数位相加

3、奇数位乘以2,如果乘积是两位数,则将每位相加求和,否则将乘积相加

4、将2,3步求的总和相加对10进行取余,如果等于0,则是有效卡,否则是无效卡

python代码:


class CreditCard(object):

    def __init__(self, card_no):
        self.card_no = card_no

    @property
    def company(self):
        comp = None
        if str(self.card_no).startswith('4'):
            comp = 'Visa Card'
        elif str(self.card_no).startswith(('50', '67', '58', '63',)):
            comp = 'Maestro Card'
        elif str(self.card_no).startswith('5'):
            comp = 'Master Card'
        elif str(self.card_no).startswith('37'):
            comp = 'American Express Card'
        elif str(self.card_no).startswith('62'):
            comp = 'Unionpay Card'
        elif str(self.card_no).startswith('6'):
            comp = 'Discover Card'
        elif str(self.card_no).startswith('35'):
            comp = 'JCB Card'
        elif str(self.card_no).startswith('7'):
            comp = 'Gasoline Card'

        return 'Company : ' + comp

    def first_check(self):
        if 13 <= len(self.card_no) <= 19:
            message = "First check : Valid in terms of length."

        else:
            message = "First check : Check Card number once again it must be of 13 or 16 digits long."
        return message


    def validate(self):
        # double every second digit from right to left
        sum_ = 0
        crd_no = self.card_no[::-1]
        for i in range(len(crd_no)):
            if i % 2 == 1:
                double_it = int(crd_no[i]) * 2
                if len(str(double_it)) == 2:
                    sum_ += sum([eval(i) for i in str(double_it)])
                else:
                    sum_ += double_it
            else:
                sum_ += int(crd_no[i])

        if sum_ % 10 == 0:
            response = "Valid Card"
        else:
            response = 'Invalid Card'

        return response

    @property
    def checksum(self):
        return '#CHECKSUM# : ' + self.card_no[-1]

    @classmethod
    def set_card(cls, card_to_check):
        return cls(card_to_check)


if __name__ == '__main__':
    card_number = input("please input card no: ")
    card = CreditCard.set_card(card_number)
    print(card.company)
    print("Card: ", card.card_no)
    print(card.first_check())
    print(card.checksum)
    print(card.validate())

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013368932/article/details/89297865

智能推荐

avr单片机动态数码管c语言,AVR单片机8位数码管显示的程序实现_不乱说话的博客-程序员宅基地

//GCC中的延时函数头文件#define HC595_latch (1 &lt;&lt; PG1) //上升沿数据打入8位锁存器,下降沿锁存器数据不变#define HC595_sclk (1 &lt;&lt; PG0) //上升沿数据移位,下降沿数据不变#define HC595_oe (1 &lt;&lt; PG4) //低电平,8位数据锁存器输出,高...

密码学复习一:古典密码_Abandoninged的博客-程序员宅基地

1:保证信息安全的关键要素:认证(鉴别),访问控制,数据保密,数据完整,抗否认性。2:四种基本攻击类型:唯密文攻击(攻击者只知道一些密文),已知明文攻击(攻击者知道一些明文密文对),选择明文攻击(攻击者可以选择一些明文密文对),针对密钥额攻击(主要是针对公钥密码系统);对于唯密文攻击一般是采用穷举攻击。3:对于算法是否公开分为古典密码和现代密码,古典密码密钥保密算法保密,现代密码密钥保密算法公开。...

HTML中编辑区域适用范围,创建可编辑区域_489599376的博客-程序员宅基地

键盘输入分类直接输入输入的键直接落入可输入DOM元素,为直接输入。E.g.英文输入。间接输入输入的键值不会直接落入可输入DOM元素,有一个中间态,为间接输入。E.g.中文输入。区分中英文输入因为任何输入都会触发input,而输入中文的时候才触发compositionstart和compositionend,可以以此来区分中英文输入。e.keyCode在中英文下不同的表现e.keyCode在英文模式...

php是什么电器元件,看完这个保证你认识“贴片电路板上”的每一个电子元件_mark9xiao的博客-程序员宅基地

随着时代和科技的进步,现在的越来越多电路板的使用了贴片元件,而贴片元件以其体积小和便于维护越来越受大家的喜爱,大家经常与电器打交道,可很多人都不知道,电路板的上的电子元件的名称。而对于经常跟电器打交道朋友来说,对贴片元件感到“畏惧”,特别是对于部分初学者,因为他们对很多电子元件的了解甚少,下面跟大家分享电路板上电子元件图解!让大家对电子元件更深入的了解。电子元件的类型不同类的元件外形一样,但内部结...

硅谷来信2,156,扎克伯格的5宗个人恩怨_三板斧数据侦探的博客-程序员宅基地

任何一个明星企业,都离不开一个强势的创始人,这个创始人也就成为了企业的名片,而他的基因也会成为公司的基因,他的特点也会成为公司的特点,无论好坏,他做事的风格也会影响整个公司的人。在这些著名企业的创始人中,有些显得比较平淡无奇,比如亚马逊的贝佐斯,Google的佩奇,有些则显得非常有个性,比如甲骨文的埃里森,苹果的乔布斯,也包括扎克伯格。争议:扎克伯格在中国的形象总的来说不错,特别是他学了几句中文,而且在雾霾天跑到北京的大街上跑步,另外做了不少捐赠的承诺。但是在美国的IT界颇有争议,主要是五宗和个人有

VVC代码学习之自定义数据结构阅读4_weixin_45133943的博客-程序员宅基地

class CodingStructure1.这个类中存储了编码所需要的一系列信息,区域,图片,父类CS,bestCS,以及slice,同时还存放了相关的QP信息,以及各种参数集SPS,PPS,VPS等等,并且可以从CS中提取到当前的cu,pu 和tu,更可以获取到可以遍历当前CU的遍历器。2.定义三个数组,分别存放CU,TU,PU, 以及m_numCUs,cucache等等,同时还保存了预测,残差,原始,重构的Pelstorage,同时可以获取当前的运动信息getMotionBuf3.同样的,

随便推点

用LSTM进行情感分析原理_sereasuesue的博客-程序员宅基地_lstm 情感分析

用LSTM进行情感分析原理深度学习在自然语言处理中的应用自然语言处理是教会机器如何去处理或者读懂人类语言的系统,主要应用领域:对话系统 - 聊天机器人(小冰) 情感分析 - 对一段文本进行情感识别(我们一会要做的) 图文映射 - CNN和RNN的融合 机器翻译 - 将一种语言翻译成另一种语言,谷歌翻译已经很好词向量模型词向量是具有空间意义的并不是简单的映射!例如,我们希望单词 “love” 和 “adore” 这两个词在向量空间中是有一定的相关性的,因为他们有类似的定义,他们都在

英语听说计算机考试演练专用,北京中考英语听说机考模拟演练_连玉君的博客-程序员宅基地

11月24日9时,海淀区举行中考英语听说机考模拟演练。在北京石油学院附属中学考点内,初三考生陈廷皓刚刚结束考试。他说:“感觉模拟考试的题目不难。之前参加全市模考已经接近满分。现在学校对听说机考很重视,每周会安排两次英语晨读,让我们练习听力,我已经准备好参加12月的考试了。”根据2018年北京中考改革方案,中考英语听说机考实行一年两考。今年12月23日举行首次考试,第二次考试安排在2018年3月24...

oracle guid 大写,UUID (GUID) 理解_请叫我花姑凉的博客-程序员宅基地

UUID,Universally Unique Identifier的缩写,UUID出现的目的,是为了让分布式系统可以不借助中心节点,就可以生成UUID来标识一些唯一的信息。GUID,是Globally Unique Identifier的缩写,跟UUID是同一个东西,只是来源于微软。1个UUID是1个16字节(128位)的数字;为了方便阅读,通常将UUID表示成如下的方式:123e4567-e8...

Git冲突解决方案_wuyepiaoxue789的博客-程序员宅基地

     程序开发使用git提交代码时,不得不面临着一个文件被多次修改和提交,这样就会产生冲突,如果处理不好,不仅冲突解决不了,还会造成回滚代码,或者代码覆盖,损失利益。特针对使用Eclipse插件解决git冲突问题,做以下梳理。一共十个步骤,每一步都不能简化省略。1.       第一步:pull一下,更新程序。方法:右键项目-&amp;gt;Team-&amp;gt;pull  此时会出现冲突,如上图,红框内...

python函数调用时的实参和形参之间传递_python 函数(实参与形参、传递参数)..._weixin_39520393的博客-程序员宅基地

函数什么是函数?函数是带名字的代码块,用于完成具体的工作。写出一个函数后,就可以一直调用。定义函数,函数的基本组成:1.1 向函数传递参数向函数中传递任意参数,这样打印出的结果就可以根据自己的选择,做出改变。即是下一节讲到的形参1 #向函数传递信息23 defgreet_user(username):4 """显示简单的问候语"""5 print("hello," + userna...

物理/虚拟高速缓存区别以及高速缓存重名/同名问题详解_dumpcore的博客-程序员宅基地_虚拟高速缓存

概述 处理器在访问存储器时,访问的地址都是虚拟地址,经过TLB和MMU的映射后变成物理地址。TBL只用于加速虚拟地址到物理地址的转换过程。得到物理地址后,若每次都直接从物理内存中读取数据,显然会变慢。实际上,处理器都配置了多级的高速缓存来加快数据的访问速度。物理高速缓存 当处理器查询MMU和TLB并得到物理地址之后,使用物理地址查询高速缓存,这种高速缓存称为物理高速缓存。缺点:使用物理高速缓存的缺点就是处理器在查询MMU和TLB后才能访问高速缓存,增加了流水线的延迟时间。 ...

推荐文章

热门文章

相关标签