>> ROB BOWDEN: Hej, jag är Rob.
Och jag hoppas att du debiteras upp för kredit.
Så första vi måste göra är begära kreditkortet
tal från användaren.
Här använder vi getLongLong.
Du kunde ha också använt getString, men i så fall skulle du behöva kontrollera
att det inte fanns några icke-numerisk tecken i strängen.
Så vi kommer att använda getLongLong.
>> Kom ihåg att du inte kan använda något som getInt, eftersom antalet kommer att vara
för stor för att passa in i ett heltal.
När vi har det numret, vi se här denna while-slinga.
Så detta medan slinga genomför Luhn algoritm som du
se i pset spec.
>> Och det är faktiskt går att vara lite smart.
Så i pset spec, märker att Steg ett och två är separata.
Vi går först över hela kreditkort nummer, letar efter alla andra
tecken med början från den andra till sista tecknet, och multiplicera dem
och lägga alla siffror.
Sen efter det, vi lägger in alla de andra siffrorna.
>> Så istället för att göra de i två separata steg, kommer vi att kombinera
dem i en iteration över Hela kreditkortsnummer.
Här ser vi int cur siffer jämlikar kreditkortsnummer, mod 10.
Vad är kreditkortsnummer mod 10 med?
Det ger oss den sista siffran i heltal.
Så kom ihåg att om vi delade numrera upp med 10, sedan resten
skulle vara vad den sista siffran är.
23 delat med 10, den Resten kommer att vara 3.
>> Så den sista siffran, nu här, ser vi vi förgrening på mult med 2.
Så vad vi ska använda mult med 2 för är att skilja mellan
en av "alla andra nummer från den andra siffran "nummer.
Multipla med 2 kommer att börja som falskt, eftersom den sista siffran bör inte
betraktas ur näst sista siffran.
>> Så sedan i slutet av detta för slinga, vi ser att vi kommer att ändra detta
från false till true.
På nästa iteration av for-slingan, det kommer att vara sant tills
I slutet, när vi ändrar den från sant till falskt.
För då kommer vi att vara på den tredje till sista siffran, som inte är en av de
siffror som vi ska multiplicera med 2.
>> Så om vi råkar vara på en av dem siffror som vi vill multiplicera med 2,
Vi ser att vi lägger till vår kontrollsumma.
Och här, vi använder ternära operatören att en gång
återigen vara lite smart.
Så om nuvarande siffra är mindre än 5, då Vi kan bara göra cur siffran gånger 2.
Det är enkelt.
Om det är 1, då vill vi att lägga till 2.
Om det är 2, vi vill lägga 4.
Om det är 4, vi vill lägga till 8.
>> Så vad är speciellt med 5?
Tja, 5 gånger 2 är 10.
Och kom ihåg från pset spec som Vi vill lägga till siffrorna i
antalet gånger två, och inte antal gånger 2 själv.
Så om det ursprungliga antalet är 7, är 7 gånger 2 14.
Vi vill lägga till 1 plus 4 till antalet, inte 14.
>> Så här, om antalet är 5 eller högre, vad vi gör är nuvarande siffra
gånger 2 minus 9.
Och om du tycker om det, 5 gånger 2 är 10.
Och så vi lägger till 1, vilket är 10 minus 9.
Och 6 gånger 2 är 12.
Så vi lägger till 3, vilket är 12 minus 9.
Och det fungerar för alla tal.
>> Så det är vad vi lägger i vårt kontrollsumma.
Och detta annat är vad som hanterar Step Två av Luhn algoritm, vilket är precis
tillsats av den siffra, om det inte sker att vara en av de alla andra siffror.
Så när vi har det, det är att hålla koll på de två första tecknen i
kreditkortsnummer, två första siffror, eftersom vi så småningom kommer
att vilja använda det här nere för att kontrollera, okej, har ett visum för att starta
med detta, och ett American Express behov till att börja med detta, och så vidare.
>> Slutligen gör vi kreditkort nummer är lika med kreditkort
antal dividerat med 10.
Varför gör vi det?
Jo, precis hanterade vi den sista siffran.
Dividera med 10 kommer att flytta hela numret över.
Så nu när vi loop tillbaka, vi är kommer att hantera
näst sista siffran.
Sedan när vi träffar här igen, vi ska att skära av den näst sista
siffra, slinga tillbaka, och om den tredje till sista siffran, och så vidare, till dess att
antalet når 0, vid vilken punkt vi bryta sig ur while-slingan.
>> Vi ska också hålla reda på kredit kortnummer längd, eftersom det är
viktigt att skilja på om det är ett giltigt kreditkortsnummer.
Så nu, när vi har beräknat kontrollsumma, kan vi avgöra om det
är ett giltigt kort.
Den kontrollsumma mod 10 är en del av Luhn algoritm.
Om kontrollsumma mod 10 återgår något icke-noll, så kommer detta att returnera sant,
i vilket fall, antalet skall vara ogiltig.
>> Annars, om kontrollsumma mod 10 är 0, så vi kan fortsätta.
Denna stora annars om säger, om det första två siffror är lika med AMEX 1,
där upp här, ser vi att AMEX 1, enligt spec, är 34.
Och vi ska också jämföra det till AMEX 2, vilket är 37.
Och kreditkortsnummer längd är som är lika med den förväntade American Express
kort längd, då kan vi print American Express.
>> Vi ska göra en liknande sak med Visa.
De två första siffrorna måste vara större än eller lika med 40 eller mindre
än eller lika med 49.
De representerar giltiga Visa-kort.
Och längden måste vara lika med Visa Längd 1 eller Visa Längd 2.
Och så längden skall vara antingen 13 eller 16 siffror.
>> Och slutligen med Mastercard, är det liknar Visa, att två första
siffrorna måste vara i ett visst intervall, och längden måste
vara exakt 16 siffror.
Så om någon av dessa fall håller, då i det första fallet kommer vi att skriva ut AMEX.
Om ärendet har, ska vi skriva ut visum.
Om ärendet har, vi ska skriva ut Mastercard.
>> Men om ingen av dem hålla, även Om checksumman var giltigt,
vi fortfarande skriva ut ogiltiga.
För det är inte en av dessa typer av kort.
Mitt namn är Rob, och jag hoppas att du hittade kredit intressant.