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='FR')
jutsu.generate('phone', locale='FR')
jutsu.generate('cardnum', network='visa')
jutsu.generate('fullname', locale='FR')mockjutsu generate iban --locale FR mockjutsu generate phone --locale FR mockjutsu generate cardnum --network visa mockjutsu bulk phone --count 1000 --locale FR mockjutsu template uuid fullname phone iban --locale FR mockjutsu start-api --port 8000
p = jutsu.profile(locale='FR') # siren, firstname, lastname, # phone (+33...), email, # iban (FR...), address # CLI mockjutsu profile --locale FR --count 3
jutsu.generate('siren') # 732829320
jutsu.generate('siret') # 73282932000074
jutsu.generate('tva') # FR73732829320
jutsu.generate('iban', locale='FR')
jutsu.generate('cardnum', network='visa')# Python jutsu.profile(locale='FR') # CLI mockjutsu profile --locale FR mockjutsu profile --locale FR --count 5
# Python jutsu.company(locale='FR') # CLI mockjutsu company --locale FR mockjutsu company --locale FR --count 3
# Python
jutsu.bulk('phone', count=100, locale='FR')
jutsu.bulk('iban', count=500, locale='FR')
# CLI
mockjutsu bulk phone --count 100 --locale FR
mockjutsu bulk iban --count 500 --locale FR# Python jutsu.template( ['uuid', 'phone', 'iban'], count=10, locale='FR') # CLI mockjutsu template uuid phone iban --locale FR --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='FR')
# CLI
mockjutsu export uuid phone iban --count 1000 --format sql --table users --locale FR# Start server
mockjutsu start-api --port 8000
GET /generate/phone?locale=FR
GET /bulk/iban?count=10&locale=FR
GET /profile?locale=FR&count=1
POST /template
{"types":["uuid","phone","iban"],"locale":"FR","count":1}
# Swagger UI
# http://localhost:8000/docsGET /generate/phone?locale=FR
GET /generate/iban?locale=FR
GET /generate/cardnum?network=visa
GET /generate/hash?algorithm=sha256
# Response
{"type":"phone","locale":"FR",
"result":"...","status":"success"}GET /bulk/phone?count=10&locale=FR
GET /bulk/iban?count=5&locale=FR
# Response
{"type":"phone","count":10,
"results":["...","..."]}{"types":["uuid","phone","iban"],
"count":1,"locale":"FR"}
# count=1 -> single object
# count>1 -> arrayGET /profile?locale=FR&count=1 GET /company?locale=FR&count=1
{"schema_map":{"id":"uuid","p":"phone"},
"count":10,"locale":"FR",
"format":"csv","table":"users"}GET /list
GET /list?cat=Financial
GET /health -> {"status":"ok"}
# Swagger UI
# http://localhost:8000/docsLe flag --mask de Mock Jutsu retourne des valeurs masquées conformes aux réglementations. Le tableau ci-dessous montre quelle fonction est masquée selon quelle réglementation et comment.
Utilisation : mockjutsu generate cardnum --mask · jutsu.generate('cardnum', mask=True) · GET /generate/cardnum?mask=true
| Réglementation | Types | Règle de masquage |
|---|---|---|
| PCI DSS v4.0 §3.4.1 (PAN) | cardnum | BIN(6) + **** + last4 → 4155 56** **** 3399 |
| PCI DSS SAD (saklanamaz) | cvv3cvv4pintrack1_datatrack2_datachip_datapin_blockpin_block_fmt33ds_cavvpasswordpassword_hashemv_arqc | All characters → *** |
| PCI DSS (kart meta) | expiryexpirymonthexpiryyear | expiry → **/** | month/year → ** |
| PCI DSS (kart sahibi) | cardowner | Each word: first char + *** → E*** K*** |
| EMV / ISO 8583 | emv_atcemv_iadiso8583_auth_requestiso8583_auth_responseiso8583_reversal | EMV atc → **XX | iad → first4+****+last4 | ISO DE002 PAN field masked |
| KVKK Rehber 2.4 (T.C. Kimlik) | tcknykn | First 2 + ******* + last 2 → 25*******10 |
| KVKK (Vergi / SGK) | vkntaxidsgkmersisinsurance_id | vkn → first3+****+last3 | sgk → middle block masked | mersis → first4+****+last4 |
| GDPR Art.5 (e-posta) | email | First 2 chars of local part + *** @ domain → al***@mail.com |
| GDPR Art.5 (doğum tarihi) | birthdate | Year visible, month/day hidden → 1990-**-** |
| GDPR Art.5 (isim) | firstnamelastnamefullnamepatronymic | Each word: first char + *** → E*** K*** |
| GDPR Art.5 (yaş) | age | All digits → ** |
| GDPR Art.5 (pasaport / ehliyet) | passportlicensemrz_td3mrz_td1 | First 2 + **** + last 2 → P1****67 | MRZ → middle block masked |
| E.164 / GDPR (telefon) | phonemsisdn | Country code + *** *** ** + last2 → +90 *** *** ** 34 |
| GDPR (yerel telefon) | phone_local | *** + last 2 digits → ***34 |
| SEPA / PSD2 (IBAN) | iban | Country(2) + check(2) + **** + last4 → TR12 **** **** **** **** **34 |
| US GLBA / IRS (SSN) | ssnssn_masked | ***-**-last4 → ***-**-5678 |
| US GLBA / IRS (EIN) | ein | **-*****last4 |
| HIPAA (NPI) | npi | First 5 + **** + last 4 |
| UK HMRC (NIN) | nin | AB ** ** ** C → AB ** ** ** C |
| UK HMRC (UTR) | utr | First 5 visible + ***** → 12345***** |
| UK NHS | nhs_numbernhsnumber | First 3 + *** + ***last1 → 943 *** ***9 |
| UK (CRN / PAYE) | crnpayesort_code | crn → first2+****+last2 | paye → first4+***+last3 | sort_code → **-**-** |
| Almanya (Kimlik / Vergi) | de_idnrde_stnrrvn | First 3-4 + **** + last 2-4 |
| Rusya (INN / SNILS) | inninn_individualsnils | First 3 + **** + last 3 |
| HIPAA (sağlık verisi) | icd10bmiheightweighthl7_messagefhir_patientdicom_uid | icd10 → digits masked | bmi/height/weight → *.* units preserved | HL7 field values → **** | FHIR name fields → *** | DICOM → first3+.***** |
| 3GPP / GSMA (Telecom) | imeiimei2iccidimsi | IMEI → TAC(8)+****+last2 | ICCID → IIN(6)+****+last4 | IMSI → MCC+MNC(5)+****+last4 |
| GDPR / RFC 6890 (IP / MAC) | ipv4public_ipmac_address | IPv4 → first 2 octets.*.* → 192.168.*.* | MAC → first 3 groups:**:**:** |
| GDPR (konum) | latitudelongitudecoordinates | 2 decimal places visible + ***** → 41.01***** |
| VIN / Araç (NHTSA) | vinvehicle | WMI+VDS(9) + **** + last4 → WBA3A5C5X****3456 |
| Plaka (KVKK) | plate | City code + letter[0]+*** + serial → 34 A** 123 |
| IATA (Havacılık) | pnr_codeiata_ticket | PNR → first2+**** | Ticket → first3+****+last3 |
| KVKK / GDPR (finansal) | balancecredit_score | balance → ****+last2 integer digits+decimal | credit_score → first digit+** |
| OWASP (oturum / kimlik doğrulama) | sessioniddeviceidusernamehandle | sessionid/deviceid → first8-****-****-****-last12 | username → first2+***+last2 | handle → @first2+*** |
| Ticaret (sipariş / kargo) | order_idtracking_number | order_id → first6+****+last4 | tracking → first4+****+last4 |
| OIDC / OAuth 2.0 (token) | oidc_tokenoidc_token_set | token → first10+***.last4 | token_set → token fields masked |
| BIP39 (anımsatıcı) | mnemonic | First word visible + *** *** ... *** |
| PSD2 / Open Banking | psd2_consent | First 12 characters + *** |
| SWIFT / ISO 20022 | swift_mt103 | IBAN/BIC/ACC fields → CC+**** → IBAN: TR**** |
| Brezilya (CPF / CNPJ) | br_cpfbr_cnpj | CPF → first3+***+***+last2 | CNPJ → first4+****+last4 |
| Hindistan (PAN / Aadhaar / GSTIN / EPIC) | in_panin_aadhaarin_gstinin_epic | PAN → first5+****+last1 | Aadhaar → XXXX XXXX last4 | GSTIN → state+PAN+****+last2 | EPIC → first3+****+last2 |
| Çin (RIC) | cn_ric | Area+year (first6) + **** + last4 |
| Meksika (CURP / RFC) | mx_curpmx_rfc | First 4 + middle masked + last 2 |
| İtalya (Codice Fiscale) | it_codicefiscale | Surname(4) + ** + birth month(2) + **** + check |
| İspanya (DNI / NIE / CCC) | es_dnies_niees_ccc | DNI/NIE → first2+****+last2 | CCC → first4+****+last4 |
| Güney Kore (RRN / BRN) | kr_rrnkr_brn | RRN → birthdate(6)-gender+***** | BRN → first3+****+last3 |
| Hollanda (BSN) | nl_bsn | First 3 + **** + last 2 |
| Polonya (PESEL) | pl_pesel | First 6 (birthdate) + ** + last 2 |
| İsveç (Personnummer) | se_personnummer | Birthdate(8) + -**** |
| Danimarka (CPR) | dk_cpr | Birthdate(6) + -**** |
| Finlandiya (HETU) | fi_hetu | Birthdate(6) + -**** |
| Norveç (Fødselsnummer) | no_fodselsnummer | First 6 (birthdate) + ** + last 2 |
| Avustralya (ABN / TFN / ACN) | au_abnau_tfnau_acn | First 3 + **** + last 2-3 |
| Malezya (NRIC) | my_nric | First 6 (birthdate+state) + **** + last 4 |
| Pakistan (CNIC) | pk_cnic | First 5 + **** + last 2 |
| Japonya (CN / IN) | jp_cnjp_in | First 4 + **** + last 4 |
| Singapur (UEN) | sg_uen | First 4 + middle masked + last 2 |
| Tayland (PIN / TIN) | th_pinth_tin | First 4 + **** + last 4 |
| Güney Afrika (IDNR) | za_idnr | First 6 (birthdate) + *** + last 3 |
| Kanada (BN) | ca_bn | First 3 + **** + last 2 |
| Yeni Zelanda (IRD) | nz_ird | First 3 + **** + last 2 |
| Arjantin (CUIT / DNI) | ar_cuitar_dni | First 2-4 + middle masked + last 2 |
| Şili (RUT) | cl_rut | First 3 + **** + last 2 |
| Kolombiya (NIT) | co_nit | First 3 + **** + last 3 |
| İsrail (IDNR) | il_idnr | First 3 + **** + last 2 |
| Romanya (CNP / CUI) | ro_cnpro_cui | CNP → first4+****+last3 | CUI → first4+****+last3 |
| Hırvatistan (OIB) | hr_oib | First 4 + **** + last 3 |
| Bulgaristan (EGN) | bg_egn | Birthdate(6) + ** + last 2 |
| Litvanya (Asmens kodas) | lt_asmens | First 5 + **** + last 2 |
| Estonya (IK) | ee_ik | First 5 + **** + last 2 |
| Portekiz (CC) | pt_cc | First 4 + **** + last 3 |
| Mısır (TIN) | eg_tn | First 3 + **** + last 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 | Generated pre-masked — --mask flag has no additional effect |