1. 程式人生 > >暴力破解練習(一)信用卡號的驗證

暴力破解練習(一)信用卡號的驗證

當你輸入信用卡號碼的時候,有沒有擔心輸錯了而造成損失呢?其實可以不必這麼擔心,因為並不是一個隨便的信用卡號碼都是合法的,
它必須通過Luhn演算法來驗證通過。
該校驗的過程:
1、從卡號最後一位數字開始,逆向將奇數位(1、3、5等等)相加。
2、從卡號最後一位數字開始,逆向將偶數位數字,先乘以2(如果乘積為兩位數,則將其減去9),再求和。
3、將奇數位總和加上偶數位總和,結果應該可以被10整除。
例如,卡號是:5432123456788881則,奇數位和=35
偶數位乘以2(有些要減去9)的結果:1 6 2 6 1 5 7 7,求和=35。
最後35+35=70 可以被10整除,認定校驗通過。
請編寫一個程式,從鍵盤輸入卡號,然後判斷是否校驗通過。通過顯示:“成功”,否則顯示“失敗”。
比如,使用者輸入:356827027232780
程式輸出:成功

【參考測試用例】
356406010024817     成功
358973017867744     成功
356827027232781     失敗
306406010024817     失敗

358973017867754     失敗

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s = "358973017867754";
	int sum1 = 0,sum2=0;
	for (int i = s.length()-1; i >= 0;i--)
	{
		//奇數
		int j = i + 1;
		if (j % 2 != 0)
		{
			//字串轉換為整數
			sum1 += s.at(i)-48;   
		}
		else
		{
			int a = 0;
			a = (s.at(i)-48) * 2;
			if (9 < a && a<100)
			{
				a -= 9;
			}
			sum2 += a;
		}
		
	}
	int sum3 = (sum1 + sum2) % 10;
	if (sum3== 0)
	{
		cout << "成功" << endl;
	}
	else
	{
		cout << "失敗" << endl;
	}
	return 0;
}
 
sum1 += s.at(i)-48;   
eg:str=1234
    假如str[0]存放的資料型別是字元‘1’,那麼減去‘0’就得到一個整形數字1,而不是字元型‘1’, 你還是不懂得話,可以檢視C程式設計的最後面的“常用字元與ASCLL程式碼對照表”。
   字元‘0’的ASCLL值是48,而字元‘1’是49,所以str[0]-'0'相當於49-48=1

相關推薦

暴力破解練習信用卡驗證

當你輸入信用卡號碼的時候,有沒有擔心輸錯了而造成損失呢?其實可以不必這麼擔心,因為並不是一個隨便的信用卡號碼都是合法的,它必須通過Luhn演算法來驗證通過。該校驗的過程:1、從卡號最後一位數字開始,逆向將奇數位(1、3、5等等)相加。2、從卡號最後一位數字開始,逆向將偶數位數

Bash腳本練習歡迎提意見,共同學習

linux#!/bin/bash #寫一個腳本(前提:請為虛擬機新增一塊硬盤,假設它為/dev/sdb),為指定的硬盤創建分區: #1、列出當前系統上所有的磁盤,讓用戶選擇,如果選擇quit則退出腳本;如果用戶選擇錯誤,就讓用戶重新選擇; #2、當用戶選擇後,提醒用戶確認接下來的操作可能會損壞數據,並請用戶確

Python練習

pythonPython練習(一):給一個不超過5位的正整數,判斷其有幾位,依次打印出個位、十位、百位、千位、萬位的數字:num = int(input(‘please enter a number: ‘)) lst = [] for i in str(num): lst.append(i)

小白的linux練習

探索linux練習一、用student用戶登陸系統圖形界面 2.打開一個bash 3.修改student的密碼,把密碼更新成”T3st1ngtlme”(主機字母和數字) 4.顯示當前系統時間 5.顯示當前系統時間,顯示格式為:”小時:分鐘:秒 AM/PM”(AM/PM為上下午標識) 6.顯示“/usr/bin

半斤八兩中級破解總結

記錄 添加 要求 傳遞 參數傳遞 bat 文件 一鍵安裝 安裝 本課主要介紹了三個工具,分別是AspWebServer, Phpnow和Wireshark  AspWebServer:   這個很簡單,直接運行 安裝.bat,這個bat很小,前面都是關於作者的信息,

vue入門練習

col pre 全局 run -c 初始 handbook serve 回車 1.安裝node,webpack   node -v   //查看已安裝版本   npm install -g webpack   //安裝webpack   npm install -g web

天梯賽練習

從右到左 false bits ppr ret tro != quick 平面 L2-017. 人以群分 題意: 給定n個正整數, 然後分成規模相差盡可能接近的兩類, 這兩類之和相差要盡可能大 分析: 直接排序, 然後分成兩部分即可 1 #include <b

微信公眾開發微信驗證開發者服務器接口

mage down charset 流程圖 ringbuf image put 不知道 als 微信驗證開發者服務器接口 微信驗證開發者服務器接口 如圖所示,開發者可填寫自己服務器的驗證token的接口地址,以及自定義的token(博主申請的測試號,使用natapp來進

Shell練習

情況 read log 文件中 一個 false mozilla ash brush 習題1:每天生成一個文件要求:請按照這樣的日期格式(xxxx-xx-xx)每日生成一個文件,例如今天生成的文件為)2018-02-05.log, 並且把磁盤的使用情況寫到到這個文件中(不用

PL/SQL 上機練習

and 系列 begin dbm BE str2 合並 where sel _(:_」∠)_ _(:_」∠)_ _(:_」∠)_騙訪問量系列_(:_」∠)_ _(:_」∠)_ _(:_」∠)_ 題目描述: 對員工表中所有員工的姓名做如下處理:姓名的首字母在‘A‘到‘G‘ 之

ProtoBuf練習

CA sage return scala 源文件 locate 如果 fixed ims 基礎數據類型 protobuf語言的基礎字段類型相當於C++語言的基礎類型 工程目錄結構 $ ls proto/ TFixed.proto TInt.proto TScalar.p

Oracle入門SQL練習

inf != 開頭 工作 排序 desc 令行 查詢排序 模糊查詢 以下內容以scott用戶下Oracle自帶實例orcl庫中四張表進行查詢,作為Oracle入門SQL基礎練習筆記,不忘初心,加油! --1).查詢一個用戶下所有的表SELECT * FROM tab; --

golang基礎練習

//遍歷map package main import "fmt" func main() { x := make(map[string]int) x["zhangsan"] = 3 x["lisi"] = 4 x["wangwu"] = 5 //#丟棄值

Redtiger SQL注入練習

感覺會的東西太少了,以後要多練習,多寫部落格。要堅持學習,一定不能放棄,為夢想奮鬥。 redtiger  這個平臺早就開始做了,但是才做到第4關。。。。 第一關: 開啟題, 先隨便試,後來發現點選 Category 後的1 可以注入, 然後就是注入了,構造cat=1'' 還報錯,估

Redtiger SQL註入練習

username shu The 查詢 info format print 多次 ali 感覺會的東西太少了,以後要多練習,多寫博客。要堅持學習,一定不能放棄,為夢想奮鬥。 redtiger 這個平臺早就開始做了,但是才做到第4關。。。。 第一關: 打開題,

Java習題練習

輸出[1,100]內所有的質數,並統計 System.out.println(1); int sum = 0; for(int a = 2; a < 101; a++) { int b = 2; while (b < a) {

內嵌補丁練習

ont 校驗和 經歷 info 長度 mil str font call 內嵌補丁練習(一) 0x00 前言 首先介紹以下運行時壓縮或者運行解壓文件,這類文件通常是代碼在運行之前已經壓縮過或者代碼被加密過,在運行過程中在進行解壓縮或者解密的PE文件。通常這樣做的目的可能

JavaScript挑戰練習-改變this指向

一.this指向的詳解 概括:this的指向到底是指向哪裡?通常來說,只有當函式執行的時候才可以確定this指向的到底是誰,簡單的也可以這麼說:this最終指向的是那個呼叫它的物件。 常見的一般有以下幾種情況: 第一種:在一個函式中有this,但是函式沒有被上一級物件所呼叫,所以此時的t

Java 由淺入深GUI程式設計實戰練習

專案簡介: 1.實現利用下拉選單的方式選擇傳送快捷語句; 2.實現對留言資訊內容的置頂處理以及至尾處理; 3.實現清屏處理或現實保留部分留言內容; 執行介面: 程式碼展示: import java.awt.BorderLayout; import java.awt.Button; imp

Python map/reduce練習

利用map和reduce編寫一個str2float函式,把字串’123.456’轉換成浮點數123.456: from functools import reduce def str2float(s): def str2num(s): DIGITS = {'0'