pip install mock-jutsu
# verify
mockjutsu --version
python -c "import mockjutsu; print('OK')"git clone https://github.com/altansayan/mock-jutsu-api.git cd mock-jutsu-api pip install -e ".[dev]" # run tests pytest tests/ -v
jutsu.generate('iban', locale='TR')
jutsu.generate('phone', locale='TR')
jutsu.generate('cardnum', network='troy')
jutsu.generate('fullname', locale='TR')mockjutsu generate iban --locale TR mockjutsu generate phone --locale TR mockjutsu generate cardnum --network troy mockjutsu bulk phone --count 1000 --locale TR mockjutsu template uuid fullname phone iban --locale TR mockjutsu start-api --port 8000
p = jutsu.profile(locale='TR') # tckn, firstname, lastname, # phone (+90...), email, # iban (TR...), address # CLI mockjutsu profile --locale TR --count 3
jutsu.generate('tckn') # 34521876543
jutsu.generate('vkn') # 1234567890
jutsu.generate('sgk') # 34-0012345-1.01-02
jutsu.generate('mersis') # 1234567890012345
jutsu.generate('iban', locale='TR')
jutsu.generate('plate', locale='TR') # 34 ABC 123# Python jutsu.profile(locale='TR') # CLI mockjutsu profile --locale TR mockjutsu profile --locale TR --count 5
# Python jutsu.company(locale='TR') # CLI mockjutsu company --locale TR mockjutsu company --locale TR --count 3
# Python
jutsu.bulk('phone', count=100, locale='TR')
jutsu.bulk('iban', count=500, locale='TR')
# CLI
mockjutsu bulk phone --count 100 --locale TR
mockjutsu bulk iban --count 500 --locale TR# Python jutsu.template( ['uuid', 'phone', 'iban'], count=10, locale='TR') # CLI mockjutsu template uuid phone iban --locale TR --count 10 mockjutsu template uuid phone iban --format csv mockjutsu template uuid phone iban --format sql --table users
# Python
jutsu.export(
{'id':'uuid','phone':'phone','iban':'iban'},
count=1000, format='sql',
table='users', locale='TR')
# CLI
mockjutsu export uuid phone iban --count 1000 --format sql --table users --locale TR# Start server
mockjutsu start-api --port 8000
GET /generate/phone?locale=TR
GET /bulk/iban?count=10&locale=TR
GET /profile?locale=TR&count=1
POST /template
{"types":["uuid","phone","iban"],"locale":"TR","count":1}
# Swagger UI
# http://localhost:8000/docsGET /generate/phone?locale=TR
GET /generate/iban?locale=TR
GET /generate/cardnum?network=troy
GET /generate/hash?algorithm=sha256
# Response
{"type":"phone","locale":"TR",
"result":"...","status":"success"}GET /bulk/phone?count=10&locale=TR
GET /bulk/iban?count=5&locale=TR
# Response
{"type":"phone","count":10,
"results":["...","..."]}{"types":["uuid","phone","iban"],
"count":1,"locale":"TR"}
# count=1 -> single object
# count>1 -> arrayGET /profile?locale=TR&count=1 GET /company?locale=TR&count=1
{"schema_map":{"id":"uuid","p":"phone"},
"count":10,"locale":"TR",
"format":"csv","table":"users"}GET /list
GET /list?cat=Financial
GET /health -> {"status":"ok"}
# Swagger UI
# http://localhost:8000/docsMock Jutsu'nun --mask bayrağı, üretilen değerleri regülasyon uyumlu biçimde maskeler. Aşağıdaki tablo, hangi fonksiyonun hangi regülasyona göre nasıl maskelendiğini gösterir.
Kullanım: mockjutsu generate cardnum --mask · jutsu.generate('cardnum', mask=True) · GET /generate/cardnum?mask=true
| Regülasyon | Tipler | Maskeleme Kuralı |
|---|---|---|
| PCI DSS v4.0 §3.4.1 (PAN) | cardnum | BIN(6) + **** + son4 → 4155 56** **** 3399 |
| PCI DSS SAD (saklanamaz) | cvv3cvv4pintrack1_datatrack2_datachip_datapin_blockpin_block_fmt33ds_cavvpasswordpassword_hashemv_arqc | Tüm karakterler → *** |
| PCI DSS (kart meta) | expiryexpirymonthexpiryyear | expiry → **/** | ay/yıl → ** |
| PCI DSS (kart sahibi) | cardowner | Her kelime: ilk harf + *** → E*** K*** |
| EMV / ISO 8583 | emv_atcemv_iadiso8583_auth_requestiso8583_auth_responseiso8583_reversal | EMV atc → **XX | iad → ilk4+****+son4 | ISO DE002 PAN alanı maskelenir |
| KVKK Rehber 2.4 (T.C. Kimlik) | tcknykn | İlk 2 + ******* + son 2 → 25*******10 |
| KVKK (Vergi / SGK) | vkntaxidsgkmersisinsurance_id | vkn → ilk3+****+son3 | sgk → orta blok maskelenir | mersis → ilk4+****+son4 |
| GDPR Art.5 (e-posta) | email | Yerel bölümün ilk 2 karakteri + *** @ domain → al***@mail.com |
| GDPR Art.5 (doğum tarihi) | birthdate | Yıl görünür, ay/gün gizli → 1990-**-** |
| GDPR Art.5 (isim) | firstnamelastnamefullnamepatronymic | Her kelime: ilk harf + *** → E*** K*** |
| GDPR Art.5 (yaş) | age | Tüm rakamlar → ** |
| GDPR Art.5 (pasaport / ehliyet) | passportlicensemrz_td3mrz_td1 | İlk 2 + **** + son 2 → P1****67 | MRZ → orta blok maskelenir |
| E.164 / GDPR (telefon) | phonemsisdn | Ülke kodu + *** *** ** + son2 → +90 *** *** ** 34 |
| GDPR (yerel telefon) | phone_local | *** + son 2 hane → ***34 |
| SEPA / PSD2 (IBAN) | iban | Ülke(2) + kontrol(2) + **** + son4 → TR12 **** **** **** **** **34 |
| US GLBA / IRS (SSN) | ssnssn_masked | ***-**-son4 → ***-**-5678 |
| US GLBA / IRS (EIN) | ein | **-*****son4 |
| HIPAA (NPI) | npi | İlk 5 + **** + son 4 |
| UK HMRC (NIN) | nin | AB ** ** ** C → AB 12 34 56 → AB ** ** ** C |
| UK HMRC (UTR) | utr | İlk 5 görünür + ***** → 12345***** |
| UK NHS | nhs_numbernhsnumber | İlk 3 + *** + ***son1 → 943 *** ***9 |
| UK (CRN / PAYE) | crnpayesort_code | crn → ilk2+****+son2 | paye → ilk4+***+son3 | sort_code → **-**-** |
| Almanya (Kimlik / Vergi) | de_idnrde_stnrrvn | İlk 3-4 + **** + son 2-4 |
| Rusya (INN / SNILS) | inninn_individualsnils | İlk 3 + **** + son 3 |
| HIPAA (sağlık verisi) | icd10bmiheightweighthl7_messagefhir_patientdicom_uid | icd10 → rakamlar maskelenir | bmi/height/weight → *.* birimleri korunur | HL7 alan içerikleri → **** | FHIR isim alanları → *** | DICOM → ilk3+.***** |
| 3GPP / GSMA (Telecom) | imeiimei2iccidimsi | IMEI → TAC(8)+****+son2 | ICCID → IIN(6)+****+son4 | IMSI → MCC+MNC(5)+****+son4 |
| GDPR / RFC 6890 (IP / MAC) | ipv4public_ipmac_address | IPv4 → ilk2 oktet.*.* → 192.168.*.* | MAC → ilk3 grup:**:**:** |
| GDPR (konum) | latitudelongitudecoordinates | 2 ondalık basamak görünür + ***** → 41.01***** |
| VIN / Araç (NHTSA) | vinvehicle | WMI+VDS(9) + **** + son4 → WBA3A5C5X****3456 |
| Plaka (KVKK) | plate | Şehir kodu + harf[0]+*** + seri → 34 A** 123 |
| IATA (Havacılık) | pnr_codeiata_ticket | PNR → ilk2+**** | Bilet → ilk3+****+son3 |
| KVKK / GDPR (finansal) | balancecredit_score | balance → ****+son2 tam hane+ondalık | credit_score → ilk rakam+** |
| OWASP (oturum / kimlik doğrulama) | sessioniddeviceidusernamehandle | sessionid/deviceid → ilk8-****-****-****-son12 | username → ilk2+***+son2 | handle → @ilk2+*** |
| Ticaret (sipariş / kargo) | order_idtracking_number | order_id → ilk6+****+son4 | tracking → ilk4+****+son4 |
| OIDC / OAuth 2.0 (token) | oidc_tokenoidc_token_set | token → ilk10+***.son4 | token_set → token alanları maskelenir |
| BIP39 (anımsatıcı) | mnemonic | İlk kelime görünür + *** *** ... *** |
| PSD2 / Open Banking | psd2_consent | İlk 12 karakter + *** |
| SWIFT / ISO 20022 | swift_mt103 | IBAN/BIC/ACC alanları → CC+**** → IBAN: TR**** |
| Brezilya (CPF / CNPJ) | br_cpfbr_cnpj | CPF → ilk3+***+***+son2 | CNPJ → ilk4+****+son4 |
| Hindistan (PAN / Aadhaar / GSTIN / EPIC) | in_panin_aadhaarin_gstinin_epic | PAN → ilk5+****+son1 | Aadhaar → XXXX XXXX son4 | GSTIN → eyalet+PAN+****+son2 | EPIC → ilk3+****+son2 |
| Çin (RIC) | cn_ric | Bölge+yıl (ilk6) + **** + son4 |
| Meksika (CURP / RFC) | mx_curpmx_rfc | İlk 4 + orta maskelenir + son 2 |
| İtalya (Codice Fiscale) | it_codicefiscale | Soyad(4) + ** + doğum ay (2) + **** + kontrol |
| İspanya (DNI / NIE / CCC) | es_dnies_niees_ccc | DNI/NIE → ilk2+****+son2 | CCC → ilk4+****+son4 |
| Güney Kore (RRN / BRN) | kr_rrnkr_brn | RRN → doğum tarihi(6)-cinsiyet+***** | BRN → ilk3+****+son3 |
| Hollanda (BSN) | nl_bsn | İlk 3 + **** + son 2 |
| Polonya (PESEL) | pl_pesel | İlk 6 (doğum tarihi) + ** + son 2 |
| İsveç (Personnummer) | se_personnummer | Doğum tarihi(8) + -**** |
| Danimarka (CPR) | dk_cpr | Doğum tarihi(6) + -**** |
| Finlandiya (HETU) | fi_hetu | Doğum tarihi(6) + -**** |
| Norveç (Fødselsnummer) | no_fodselsnummer | İlk 6 (doğum tarihi) + ** + son 2 |
| Avustralya (ABN / TFN / ACN) | au_abnau_tfnau_acn | İlk 3 + **** + son 2-3 |
| Malezya (NRIC) | my_nric | İlk 6 (doğum tarihi+bölge) + **** + son 4 |
| Pakistan (CNIC) | pk_cnic | İlk 5 + **** + son 2 |
| Japonya (CN / IN) | jp_cnjp_in | İlk 4 + **** + son 4 |
| Singapur (UEN) | sg_uen | İlk 4 + orta maskelenir + son 2 |
| Tayland (PIN / TIN) | th_pinth_tin | İlk 4 + **** + son 4 |
| Güney Afrika (IDNR) | za_idnr | İlk 6 (doğum tarihi) + *** + son 3 |
| Kanada (BN) | ca_bn | İlk 3 + **** + son 2 |
| Yeni Zelanda (IRD) | nz_ird | İlk 3 + **** + son 2 |
| Arjantin (CUIT / DNI) | ar_cuitar_dni | İlk 2-4 + orta maskelenir + son 2 |
| Şili (RUT) | cl_rut | İlk 3 + **** + son 2 |
| Kolombiya (NIT) | co_nit | İlk 3 + **** + son 3 |
| İsrail (IDNR) | il_idnr | İlk 3 + **** + son 2 |
| Romanya (CNP / CUI) | ro_cnpro_cui | CNP → ilk4+****+son3 | CUI → ilk4+****+son3 |
| Hırvatistan (OIB) | hr_oib | İlk 4 + **** + son 3 |
| Bulgaristan (EGN) | bg_egn | Doğum tarihi(6) + ** + son 2 |
| Litvanya (Asmens kodas) | lt_asmens | İlk 5 + **** + son 2 |
| Estonya (IK) | ee_ik | İlk 5 + **** + son 2 |
| Portekiz (CC) | pt_cc | İlk 4 + **** + son 3 |
| Mısır (TIN) | eg_tn | İlk 3 + **** + son 2 |
| Ön-maskeli tipler (_masked varyantlar) | tckn_maskedssn_maskedaccount_number_maskedmicr_line_maskedtransaction_description_maskedcheck_number_maskedpayment_reference_maskedcredit_limit_maskedmortgage_rate_maskedpremium_amount_maskedportfolio_id_maskedsar_number_maskedpolicy_number_maskedclaim_number_maskedubo_ownership_percentage_maskedconsent_id_maskedliquidity_pool_id_masked | Zaten maskeli üretilir — --mask bayrağı etkisizdir |