>> ROB BOWDEN: Hi, ek is Rob.
En ek hoop dat jy aangekla vir krediet.
So die eerste ding wat ons moet doen word versoek om die kredietkaart
nommer van die gebruiker.
Hier gebruik ons ​​getLongLong.
Jy kan ook gebruik getString, maar In daardie geval, sal jy nodig het om seker te maak
dat daar geen nie-numeriese karakters in die string.
So ons sal gebruik getLongLong.
>> Onthou dat jy nie iets kan gebruik soos getint, aangesien die aantal sal wees
te groot om te pas in 'n heelgetal.
Sodra ons dat die getal, ons hier sien dit terwyl loop.
So dit terwyl lus is die uitvoering Luhn se algoritme wat u
sien in die pset spec.
>> En dit is eintlik gaan om 'n bietjie slim.
So in die pset spec, sien dat Stappe gedoen om een ​​en twee afsonderlike.
Ons gaan oor die hele kredietkaart eerste nommer, op soek na elke ander
karakter begin van die tweede na laaste karakter, en vermenigvuldig dit
en die toevoeging van al die syfers.
Daarna het ons voeg in al die ander syfers.
>> So in plaas van om die twee afsonderlike stappe, gaan ons te kombineer
hulle in een iterasie oor die hele kredietkaart nommer.
Hier sien ons int huidige syfer gelykes kredietkaart nommer, mod 10.
Wat is kredietkaart nommer mod 10 doen?
Dit gee ons die laaste syfer in die hele nommer.
So onthou dat as ons verdeel die tel tot by 10, dan is die res
sou wees wat dit ook al laaste syfer is.
23 gedeel deur 10, die restant sal wees 3.
>> So het die laaste syfer, wat nou hier is, sien ons ons vertakking op mult deur 2.
So wat ons gaan word met behulp van mult deur 2 vir is om te onderskei tussen
een van die "elke ander nommers uit Die tweede syfer "getalle.
Mult deur 2 gaan om te begin as vals is, sedert die laaste syfer moet nie
word beskou as van die tweede laaste syfer.
>> So dan aan die einde van hierdie lus vir ons sien dat ons gaan om dit te verander
van vals waar.
Op die volgende iterasie van die lus, dit gaan beskou waar tot
die einde, wanneer ons verander dit van ware vals.
Want dan sal ons op die derde laaste syfer, wat nie een van die
syfers dat ons moet vermeerder deur 2.
>> So as ons gebeur te wees op een van daardie syfers wat ons wil vermenigvuldig met 2,
ons sien ons toe te voeg tot ons checksum.
En hier, ons met behulp van die drieledige operateur te keer
weer 'n bietjie slim.
So as huidige syfer is minder as 5 is, dan ons kan net doen huidige syfer keer 2.
Dit is eenvoudig.
As dit is 1, dan wil ons by te voeg 2.
As dit is 2, ons wil voeg 4.
As dit is 4, ons wil voeg 8.
>> So, wat is spesiaal 5?
Wel, 5 keer 2 is 10.
En onthou uit die pset spec wat Ons wil hê dat die syfers van die by te voeg
aantal keer 2, en nie die aantal keer 2 self.
So as die oorspronklike getal is 7, 7 keer 2 is 14.
Ons wil by te voeg 1 plus 4 die nommer, nie 14.
>> So hier is, as die nommer 5 of groter, wat ons doen is huidig ​​syfer
keer 2 minus 9.
En as jy dink oor wat, 5 keer 2 is 10.
En so is ons die toevoeging van 1, wat is 10 minus 9.
En 6 keer 2 is 12.
So ons is die toevoeging van 3, wat 12 minus 9.
En dit werk vir alle getalle.
>> So dit is wat ons te voeg ons checksum.
En dit anders is wat die hantering Stap Twee van Luhn se algoritme, wat net
die toevoeging van die syfer as dit nie gebeur nie een van die elke ander syfers om te wees.
So een keer het ons dat dit is die behoud van spoor van die eerste twee karakters van
die kredietkaart nommer, die eerste twee syfers, aangesien ons uiteindelik gaan
te wil hê dat die af te gebruik hier te verifieer, Alle reg, 'n visum te begin
Met hierdie, en 'n American Express behoeftes om te begin met hierdie, en so aan.
>> Ten slotte, ons doen kredietkaart getal gelyk kredietkaart
getal gedeel deur 10.
Hoekom doen ons dit?
Wel, ons het net hanteer die laaste syfer.
Deel deur 10 verskuif die hele aantal verby.
So nou wanneer ons lus terug, ons is gaan word die hantering van die
tweede laaste syfer.
Toe ons weer getref het, gaan ons die tweede af te sny om te hou
syfer, lus terug, en hanteer die derde syfer om te hou, en so aan, totdat die
getal bereik 0, by watter punt ons breek van die lus.
>> Ons is ook die dop van die krediet kaart nommer lengte, want dit is
belangrik om te onderskei of dit 'n geldige kredietkaart nommer.
So nou, nadat ons het bereken die checksum, kan ons bepaal of dit
is 'n geldige kaart.
Die checksum mod 10 is deel van Luhn se algoritme.
As checksum mod 10 opbrengste iets nie-nul, dan is dit sal terugkeer waar is,
in welke geval, die aantal moet ongeldig.
>> Andersins, as checksum mod 10 0, dan kan ons voortgaan.
Hierdie groot anders as sê, as die eerste twee syfers is gelyk aan AMEX 1,
waar tot hier, sien ons dat AMEX 1, soos per die spec, is 34.
En ons sal ook vergelyk te AMEX 2, wat is 37.
En die kredietkaart nommer lengte gelykstaande aan die verwagte American Express
kaart lengte, dan kan ons druk American Express.
>> Ons sal 'n soortgelyke ding doen met Visa.
Die eerste twee syfers moet groter wees as of gelyk aan 40 of minder
as of gelyk aan 49.
Diegene verteenwoordig geldige visum kaarte.
En die lengte moet gelyk aan wees Visa Lengte 1 of Visa Lengte 2.
En so het die lengte moet óf 13 of 16 syfers lank.
>> En uiteindelik met MasterCard, dit is soortgelyk aan Visa, wat die eerste twee
syfers moet wees in 'n sekere reeks, en die lengte moet
presies 16 syfers.
So as enige van dié gevalle hou, dan in die eerste geval is, sal ons druk AMEX.
As dit die geval hou, sal ons druk Visa.
As dit die geval hou, sal ons druk MasterCard.
>> Maar as een van daardie hou, selfs As die checksum geldig was,
het ons nog druk ongeldig.
Want dit is nie een van hierdie tipe van kaarte.
My naam is Rob, en ek hoop dat jy gevind krediet interessant.