Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions src/data/base/creditcards/creditcards.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
use wasm_bindgen::prelude::*;
use crate::utils::seeder;
use rand::Rng;
use std::iter;
use chrono::{Datelike, Utc};

#[wasm_bindgen]
pub fn get_credit_card_number() -> String {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Get rid of the get at the start

let cardnum = get_credit_card_number_and_issuer();
let cardnum_split = cardnum.split_once(": ").unwrap();
cardnum_split.1.to_string()
}

#[wasm_bindgen]
pub fn get_credit_card_issuer() -> String {
ISSUERS[seeder::gen_range(0..ISSUERS_LEN)].to_string()
}

#[wasm_bindgen]
pub fn get_credit_card_number_and_issuer() -> String {
let mut card_number = String::from("");
let issuer = ISSUERS[seeder::gen_range(0..ISSUERS_LEN)];
const CHARSET: &[u8] = b"0123456789";
let mut rng = rand::thread_rng();
let one_char = || CHARSET[rng.gen_range(0..CHARSET.len())] as char;

match issuer {
"Visa" => {
card_number.push('4');
let num_of_digits = [12,15][seeder::gen_range(0..2)];
let digits: String = iter::repeat_with(one_char).take(num_of_digits).collect();
card_number.push_str(&digits);
},
"Mastercard" => {
card_number.push('5');
let digits: String = iter::repeat_with(one_char).take(15).collect();
card_number.push_str(&digits);
},
"American Express" => {
card_number.push('3');
card_number.push(['4','7'][seeder::gen_range(0..2)]);
let digits: String = iter::repeat_with(one_char).take(13).collect();
card_number.push_str(&digits);

},
"Discover" => {
card_number.push('6');
let digits: String = iter::repeat_with(one_char).take(15).collect();
card_number.push_str(&digits);
},
"Diners Club" => {
card_number.push('3');
card_number.push(['0','6','8'][seeder::gen_range(0..3)]);
let digits: String = iter::repeat_with(one_char).take(12).collect();
card_number.push_str(&digits);
// Add either 0, 6, 8
},
"Carte Blanche" => {
card_number.push('3');
card_number.push(['0','6','8'][seeder::gen_range(0..3)]);
let digits: String = iter::repeat_with(one_char).take(12).collect();
card_number.push_str(&digits);
// Add either 0, 6, 8
},
_ => {},
};

format!("{}: {}", issuer, card_number)
}

#[wasm_bindgen]
pub fn get_credit_card_cvv() -> String {
const CHARSET: &[u8] = b"0123456789";
let mut rng = rand::thread_rng();
let one_char = || CHARSET[rng.gen_range(0..CHARSET.len())] as char;
let digits: String = iter::repeat_with(one_char).take(3).collect();
digits
}

#[wasm_bindgen]
pub fn get_credit_card_expiry() -> String {
let mut rng = rand::thread_rng();
let month = rng.gen_range(1..13);
let now = Utc::now();
let year = (now.year() + rng.gen_range(1..6)).to_string().split_off(2);

format!("{:02}/{}", month, year)
}

static ISSUERS: [&'static str; 6] = [
"Visa",
"Mastercard",
"American Express",
"Discover",
"Diners Club",
"Carte Blanche",
];
static ISSUERS_LEN: usize = ISSUERS.len();
1 change: 1 addition & 0 deletions src/data/base/creditcards/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub mod creditcards;
3 changes: 2 additions & 1 deletion src/data/base/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ pub mod hacker;
pub mod color;
pub mod location;
pub mod internet;
pub mod car;
pub mod creditcards;
pub mod car;