Sahte veri üreteci
Doğrulamayı geçen sahte veri üretin: Luhn kartları, mod-97 IBAN'lar, gerçek UUID'ler. Tohumla yeniden üretilebilir: JSON, CSV, NDJSON veya SQL.
[
{
"id": "018cc251-f400-79a7-abdf-9623646f1963",
"first_name": "Ruby",
"last_name": "Long",
"email": "[email protected]",
"country": "IE",
"created_at": "2024-04-13T08:13:34Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc251-f7e8-7727-8c38-6095cbcabdb9",
"first_name": "Ellen",
"last_name": "Hoffman",
"email": "[email protected]",
"country": "US",
"created_at": "2024-06-28T10:45:21Z",
"last_seen_at": "2024-10-31T16:44:09Z",
"is_active": false
},
{
"id": "018cc251-fbd0-7056-ad40-e80a775668cc",
"first_name": "Keith",
"last_name": "Hudson",
"email": "[email protected]",
"country": "AR",
"created_at": "2025-08-11T01:04:04Z",
"last_seen_at": "2025-09-19T15:18:41Z",
"is_active": true
},
{
"id": "018cc251-ffb8-74a1-b4c8-83cc6bd2ae90",
"first_name": "Thomas",
"last_name": "Moore",
"email": "[email protected]",
"country": "BE",
"created_at": "2025-02-21T16:27:55Z",
"last_seen_at": "2025-04-28T03:30:59Z",
"is_active": true
},
{
"id": "018cc252-03a0-7309-8795-f9f277a8f8c0",
"first_name": "Benjamin",
"last_name": "Austin",
"email": "[email protected]",
"country": "MX",
"created_at": "2024-06-15T11:04:56Z",
"last_seen_at": "2025-06-30T22:00:26Z",
"is_active": true
},
{
"id": "018cc252-0788-7658-937d-58b138c92232",
"first_name": "Barbara",
"last_name": "Flores",
"email": "[email protected]",
"country": "GR",
"created_at": "2024-04-17T19:41:08Z",
"last_seen_at": "2025-01-13T23:55:46Z",
"is_active": true
},
{
"id": "018cc252-0b70-7c3a-96ae-719ee90a05af",
"first_name": "Allen",
"last_name": "Vazquez",
"email": "[email protected]",
"country": "NG",
"created_at": "2024-09-18T13:23:49Z",
"last_seen_at": "2026-05-04T06:32:51Z",
"is_active": false
},
{
"id": "018cc252-0f58-7dfd-8623-52572f04ce20",
"first_name": "Harry",
"last_name": "Nichols",
"email": "[email protected]",
"country": "SG",
"created_at": "2026-06-26T14:48:47Z",
"last_seen_at": "2026-06-30T12:56:13Z",
"is_active": false
},
{
"id": "018cc252-1340-738f-b536-279444cb4512",
"first_name": "Elaine",
"last_name": "Wagner",
"email": "[email protected]",
"country": "UA",
"created_at": "2025-05-09T14:48:44Z",
"last_seen_at": "2026-05-19T14:58:47Z",
"is_active": true
},
{
"id": "018cc252-1728-7d96-8856-b87ee9d904e9",
"first_name": "Fred",
"last_name": "Fisher",
"email": "[email protected]",
"country": "JP",
"created_at": "2025-11-25T05:27:13Z",
"last_seen_at": "2026-04-04T05:36:09Z",
"is_active": true
},
{
"id": "018cc252-1b10-7baa-a79b-9567cf1366fd",
"first_name": "Lois",
"last_name": "Nelson",
"email": "[email protected]",
"country": "FR",
"created_at": "2025-05-08T16:32:25Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-1ef8-7c8c-b859-cea655faef9c",
"first_name": "Mark",
"last_name": "Cunningham",
"email": "[email protected]",
"country": "FI",
"created_at": "2026-02-21T11:09:02Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-22e0-77bf-bc1c-40120a5b29c4",
"first_name": "Anne",
"last_name": "Flores",
"email": "[email protected]",
"country": "KR",
"created_at": "2025-08-02T22:55:20Z",
"last_seen_at": "2025-10-27T03:27:52Z",
"is_active": true
},
{
"id": "018cc252-26c8-7220-9453-1804e8ce88c4",
"first_name": "Arthur",
"last_name": "Crawford",
"email": "[email protected]",
"country": "PL",
"created_at": "2025-02-26T04:55:03Z",
"last_seen_at": "2025-07-25T07:05:17Z",
"is_active": true
},
{
"id": "018cc252-2ab0-75a8-8a2b-28833306b87c",
"first_name": "Ronald",
"last_name": "Hansen",
"email": "[email protected]",
"country": "KR",
"created_at": "2025-03-09T06:31:44Z",
"last_seen_at": "2026-01-04T03:11:24Z",
"is_active": true
},
{
"id": "018cc252-2e98-7c38-93e2-9f80d039eb75",
"first_name": "Donna",
"last_name": "Porter",
"email": "[email protected]",
"country": "IE",
"created_at": "2026-01-12T06:55:22Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-3280-77a0-8152-8f5a9584a581",
"first_name": "Carol",
"last_name": "Wells",
"email": "[email protected]",
"country": "PL",
"created_at": "2025-07-20T23:09:02Z",
"last_seen_at": "2026-01-24T23:04:38Z",
"is_active": true
},
{
"id": "018cc252-3668-7208-8bbe-619dada6b7e0",
"first_name": "Sheila",
"last_name": "Lee",
"email": "[email protected]",
"country": "PT",
"created_at": "2025-01-05T20:09:52Z",
"last_seen_at": "2025-04-08T12:02:09Z",
"is_active": false
},
{
"id": "018cc252-3a50-7b11-9261-0c17e909f6fb",
"first_name": "Jack",
"last_name": "Evans",
"email": "[email protected]",
"country": "KE",
"created_at": "2025-12-29T14:31:00Z",
"last_seen_at": "2026-03-28T14:30:43Z",
"is_active": true
},
{
"id": "018cc252-3e38-7f22-8cc7-0dd649d26379",
"first_name": "Randy",
"last_name": "Harris",
"email": "[email protected]",
"country": "GB",
"created_at": "2026-06-26T19:25:04Z",
"last_seen_at": "2026-06-30T08:39:51Z",
"is_active": true
},
{
"id": "018cc252-4220-7e86-8dae-b25b4f837713",
"first_name": "Josephine",
"last_name": "Castro",
"email": "[email protected]",
"country": "DK",
"created_at": "2024-02-07T22:33:55Z",
"last_seen_at": "2026-02-23T13:56:30Z",
"is_active": true
},
{
"id": "018cc252-4608-7120-abd5-535883ca01b9",
"first_name": "Edith",
"last_name": "Graham",
"email": "[email protected]",
"country": "CN",
"created_at": "2024-04-29T08:59:26Z",
"last_seen_at": "2024-06-17T10:20:45Z",
"is_active": true
},
{
"id": "018cc252-49f0-77f7-9bf9-17e87b0a09c6",
"first_name": "Tracy",
"last_name": "Willis",
"email": "[email protected]",
"country": "PT",
"created_at": "2024-03-21T07:42:06Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-4dd8-75c8-8b04-1e0fb891e435",
"first_name": "Irene",
"last_name": "Larson",
"email": "[email protected]",
"country": "AT",
"created_at": "2025-06-04T15:01:38Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-51c0-7be0-a6ca-12bc704a2b3f",
"first_name": "Betty",
"last_name": "Morrison",
"email": "[email protected]",
"country": "ID",
"created_at": "2025-11-11T21:56:19Z",
"last_seen_at": "2026-03-29T03:33:49Z",
"is_active": true
},
{
"id": "018cc252-55a8-736d-a7b2-8bec744ecf74",
"first_name": "Kevin",
"last_name": "Cox",
"email": "[email protected]",
"country": "GR",
"created_at": "2025-10-06T23:28:21Z",
"last_seen_at": null,
"is_active": false
},
{
"id": "018cc252-5990-73ca-a2d3-89bf2b8eb5f6",
"first_name": "Sean",
"last_name": "Carr",
"email": "[email protected]",
"country": "KR",
"created_at": "2026-02-19T23:27:53Z",
"last_seen_at": "2026-03-02T22:16:30Z",
"is_active": true
},
{
"id": "018cc252-5d78-79e2-bd4d-d8b6867867dc",
"first_name": "Heather",
"last_name": "Ferguson",
"email": "[email protected]",
"country": "IL",
"created_at": "2024-07-07T01:39:16Z",
"last_seen_at": "2025-09-21T19:17:00Z",
"is_active": false
},
{
"id": "018cc252-6160-78f8-a9af-d73b74581b86",
"first_name": "Rose",
"last_name": "Chen",
"email": "[email protected]",
"country": "DE",
"created_at": "2024-09-07T16:16:48Z",
"last_seen_at": "2024-10-02T08:29:39Z",
"is_active": true
},
{
"id": "018cc252-6548-71f0-ab4f-c824fd842a67",
"first_name": "Maria",
"last_name": "Brooks",
"email": "[email protected]",
"country": "FR",
"created_at": "2024-06-29T06:22:30Z",
"last_seen_at": "2025-12-22T00:38:13Z",
"is_active": true
},
{
"id": "018cc252-6930-7067-b516-480051493ec0",
"first_name": "Donna",
"last_name": "Hamilton",
"email": "[email protected]",
"country": "IE",
"created_at": "2024-09-01T09:09:40Z",
"last_seen_at": "2025-03-29T23:26:22Z",
"is_active": false
},
{
"id": "018cc252-6d18-7de1-bae1-21dc471405fa",
"first_name": "Rachel",
"last_name": "Wagner",
"email": "[email protected]",
"country": "IE",
"created_at": "2026-05-31T02:06:02Z",
"last_seen_at": "2026-06-17T16:37:27Z",
"is_active": false
},
{
"id": "018cc252-7100-752d-bc4e-c4e5bd755743",
"first_name": "Philip",
"last_name": "Jones",
"email": "[email protected]",
"country": "NO",
"created_at": "2024-10-21T12:22:35Z",
"last_seen_at": "2025-02-15T07:00:10Z",
"is_active": true
},
{
"id": "018cc252-74e8-7b4d-b9cf-4e8e03d1e269",
"first_name": "Bonnie",
"last_name": "Carter",
"email": "[email protected]",
"country": "PT",
"created_at": "2026-05-28T06:16:25Z",
"last_seen_at": "2026-06-26T21:36:12Z",
"is_active": true
},
{
"id": "018cc252-78d0-708b-a96f-d9f474e95238",
"first_name": "Douglas",
"last_name": "Evans",
"email": "[email protected]",
"country": "NG",
"created_at": "2024-02-18T20:36:33Z",
"last_seen_at": "2024-10-31T01:37:50Z",
"is_active": true
},
{
"id": "018cc252-7cb8-7865-96fa-e9681611dbed",
"first_name": "Theresa",
"last_name": "Larson",
"email": "[email protected]",
"country": "NZ",
"created_at": "2024-11-21T08:57:18Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-80a0-7eca-80cd-7159faf3467f",
"first_name": "Gladys",
"last_name": "Reyes",
"email": "[email protected]",
"country": "NG",
"created_at": "2024-04-27T11:34:46Z",
"last_seen_at": "2026-03-09T18:39:31Z",
"is_active": true
},
{
"id": "018cc252-8488-76b2-9271-dabf0da27b4f",
"first_name": "Bonnie",
"last_name": "Cook",
"email": "[email protected]",
"country": "AT",
"created_at": "2024-01-13T17:42:35Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-8870-70d0-ab33-72cd838e6603",
"first_name": "Diane",
"last_name": "Wells",
"email": "[email protected]",
"country": "NZ",
"created_at": "2024-05-02T11:22:23Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-8c58-725c-980d-f206b971497b",
"first_name": "Gloria",
"last_name": "Woods",
"email": "[email protected]",
"country": "IT",
"created_at": "2025-06-27T01:56:54Z",
"last_seen_at": "2025-09-04T17:13:00Z",
"is_active": true
},
{
"id": "018cc252-9040-786d-90d1-5c9bae512dbf",
"first_name": "Alan",
"last_name": "Rodriguez",
"email": "[email protected]",
"country": "DK",
"created_at": "2026-03-29T17:48:08Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-9428-7b58-8dde-508b603b97d8",
"first_name": "Leonard",
"last_name": "Jones",
"email": "[email protected]",
"country": "MX",
"created_at": "2026-02-06T22:38:18Z",
"last_seen_at": "2026-04-27T00:46:32Z",
"is_active": true
},
{
"id": "018cc252-9810-7c69-8024-23852691d72c",
"first_name": "Maria",
"last_name": "Davis",
"email": "[email protected]",
"country": "JP",
"created_at": "2025-03-30T14:01:05Z",
"last_seen_at": "2025-04-24T10:25:01Z",
"is_active": true
},
{
"id": "018cc252-9bf8-7e3a-a37a-06b1a661a0dc",
"first_name": "Carl",
"last_name": "Duncan",
"email": "[email protected]",
"country": "KE",
"created_at": "2026-03-30T06:02:52Z",
"last_seen_at": "2026-05-16T00:15:55Z",
"is_active": false
},
{
"id": "018cc252-9fe0-7a01-8a38-5d3e36f9eca3",
"first_name": "Phillip",
"last_name": "Harrison",
"email": "[email protected]",
"country": "DK",
"created_at": "2024-07-12T01:56:26Z",
"last_seen_at": "2026-05-28T21:32:17Z",
"is_active": true
},
{
"id": "018cc252-a3c8-7977-a212-1c82b978ccbe",
"first_name": "Kim",
"last_name": "Franklin",
"email": "[email protected]",
"country": "KE",
"created_at": "2024-09-23T15:16:03Z",
"last_seen_at": "2025-08-20T03:29:07Z",
"is_active": true
},
{
"id": "018cc252-a7b0-78f6-bb2a-d194bc638e71",
"first_name": "Patrick",
"last_name": "Coleman",
"email": "[email protected]",
"country": "ID",
"created_at": "2025-01-06T09:04:26Z",
"last_seen_at": "2025-07-21T22:36:07Z",
"is_active": true
},
{
"id": "018cc252-ab98-7b5b-8f5c-8b6a21b71208",
"first_name": "Harry",
"last_name": "Martin",
"email": "[email protected]",
"country": "ES",
"created_at": "2026-02-21T17:42:10Z",
"last_seen_at": "2026-05-16T20:52:12Z",
"is_active": true
},
{
"id": "018cc252-af80-7504-8719-59c6e3efd9c3",
"first_name": "Carlos",
"last_name": "Gibson",
"email": "[email protected]",
"country": "ZA",
"created_at": "2024-01-14T06:39:34Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-b368-7525-9a9c-a09c2f8c2c8b",
"first_name": "Jean",
"last_name": "Morales",
"email": "[email protected]",
"country": "CA",
"created_at": "2025-06-05T13:13:54Z",
"last_seen_at": "2025-07-18T07:30:36Z",
"is_active": true
},
{
"id": "018cc252-b750-76bd-81cc-42435c3231bd",
"first_name": "Ernest",
"last_name": "Cooper",
"email": "[email protected]",
"country": "FR",
"created_at": "2026-06-30T05:15:30Z",
"last_seen_at": "2026-06-30T22:07:31Z",
"is_active": true
},
{
"id": "018cc252-bb38-7a65-8fdd-29417173ce08",
"first_name": "John",
"last_name": "Wallace",
"email": "[email protected]",
"country": "GR",
"created_at": "2024-01-01T11:53:11Z",
"last_seen_at": "2025-05-13T01:10:51Z",
"is_active": false
},
{
"id": "018cc252-bf20-7253-a075-e01c6d997ffd",
"first_name": "Lee",
"last_name": "Brooks",
"email": "[email protected]",
"country": "AU",
"created_at": "2024-03-20T07:03:24Z",
"last_seen_at": "2025-04-29T10:30:14Z",
"is_active": true
},
{
"id": "018cc252-c308-7709-a61e-916f4cb44f86",
"first_name": "Antonio",
"last_name": "Evans",
"email": "[email protected]",
"country": "JP",
"created_at": "2025-09-17T01:49:49Z",
"last_seen_at": "2026-04-27T19:54:08Z",
"is_active": true
},
{
"id": "018cc252-c6f0-7095-be95-c60913b0062d",
"first_name": "Jose",
"last_name": "Porter",
"email": "[email protected]",
"country": "ZA",
"created_at": "2024-06-01T00:33:54Z",
"last_seen_at": "2024-09-30T08:59:58Z",
"is_active": false
},
{
"id": "018cc252-cad8-7565-b5d8-117f4a6fb217",
"first_name": "Eric",
"last_name": "Ward",
"email": "[email protected]",
"country": "TR",
"created_at": "2024-03-06T08:01:45Z",
"last_seen_at": "2024-10-07T12:38:03Z",
"is_active": true
},
{
"id": "018cc252-cec0-79ae-adaa-96058dd4aabe",
"first_name": "Marjorie",
"last_name": "Cox",
"email": "[email protected]",
"country": "NG",
"created_at": "2026-06-08T11:01:04Z",
"last_seen_at": "2026-06-20T16:41:37Z",
"is_active": true
},
{
"id": "018cc252-d2a8-7d31-bab8-63bfaa7342bd",
"first_name": "Bryan",
"last_name": "Pena",
"email": "[email protected]",
"country": "IT",
"created_at": "2024-01-06T14:25:41Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-d690-7e1b-a275-f48a8c1ccbf6",
"first_name": "Catherine",
"last_name": "Munoz",
"email": "[email protected]",
"country": "AU",
"created_at": "2026-05-30T07:29:25Z",
"last_seen_at": "2026-06-23T08:23:39Z",
"is_active": true
},
{
"id": "018cc252-da78-7c22-9180-f137d46ec702",
"first_name": "Joyce",
"last_name": "Jordan",
"email": "[email protected]",
"country": "TR",
"created_at": "2025-01-13T19:52:26Z",
"last_seen_at": null,
"is_active": true
},
{
"id": "018cc252-de60-7bc5-907f-8eebca9226bf",
"first_name": "Jennifer",
"last_name": "Riley",
"email": "[email protected]",
"country": "AT",
"created_at": "2026-02-21T06:27:48Z",
"last_seen_at": "2026-04-30T10:23:57Z",
"is_active": true
},
{
"id": "018cc252-e248-7464-86b7-54ee11fc6051",
"first_name": "Amanda",
"last_name": "Daniels",
"email": "[email protected]",
"country": "IL",
"created_at": "2025-04-29T02:18:30Z",
"last_seen_at": "2026-04-17T18:37:07Z",
"is_active": false
},
{
"id": "018cc252-e630-7bf3-ab8d-a72175e7c3fb",
"first_name": "Laura",
"last_name": "Alvarado",
"email": "[email protected]",
"country": "PT",
"created_at": "2024-08-26T17:26:51Z",
"last_seen_at": "2025-09-16T12:46:07Z",
"is_active": true
},
{
"id": "018cc252-ea18-74fb-955a-5d6d42ed1760",
"first_name": "Andrea",
"last_name": "Turner",
"email": "[email protected]",
"country": "CA",
"created_at": "2024-07-13T08:04:19Z",
"last_seen_at": "2025-01-08T17:24:13Z",
"is_active": true
},
{
"id": "018cc252-ee00-7216-953a-2094b3402b1e",
"first_name": "Margaret",
"last_name": "Jackson",
"email": "[email protected]",
"country": "NZ",
"created_at": "2025-07-14T00:05:54Z",
"last_seen_at": "2026-05-05T09:44:04Z",
"is_active": true
},
{
"id": "018cc252-f1e8-7262-91aa-5818265220ca",
"first_name": "Rose",
"last_name": "Johnson",
"email": "[email protected]",
"country": "KR",
"created_at": "2024-07-18T02:49:21Z",
"last_seen_at": "2025-04-18T08:52:53Z",
"is_active": true
},
{
"id": "018cc252-f5d0-72f1-ba49-a52514f881dd",
"first_name": "Fred",
"last_name": "George",
"email": "[email protected]",
"country": "PL",
"created_at": "2025-10-26T23:11:53Z",
"last_seen_at": "2025-11-05T21:15:27Z",
"is_active": true
},
{
"id": "018cc252-f9b8-7173-b05d-540124a4fc47",
"first_name": "Sara",
"last_name": "Greene",
"email": "[email protected]",
"country": "PT",
"created_at": "2026-04-26T10:11:22Z",
"last_seen_at": "2026-05-07T04:01:08Z",
"is_active": true
},
{
"id": "018cc252-fda0-7ed5-a24a-3f179c69fc3c",
"first_name": "Jesse",
"last_name": "Bennett",
"email": "[email protected]",
"country": "SG",
"created_at": "2025-10-08T16:19:51Z",
"last_seen_at": "2026-03-04T05:50:50Z",
"is_active": true
},
{
"id": "018cc253-0188-74dd-a728-ed228fc827ac",
"first_name": "Louise",
"last_name": "Santos",
"email": "[email protected]",
"country": "FI",
"created_at": "2026-05-29T18:38:35Z",
"last_seen_at": "2026-06-01T15:33:29Z",
"is_active": true
},
{
"id": "018cc253-0570-7408-b582-07fbebeacbbf",
"first_name": "Scott",
"last_name": "Grant",
"email": "[email protected]",
"country": "NZ",
"created_at": "2024-02-11T17:35:11Z",
"last_seen_at": "2025-08-06T23:23:49Z",
"is_active": true
},
{
"id": "018cc253-0958-7c12-b38e-edc7af958916",
"first_name": "Judy",
"last_n28086 karakterin ilk 20000 tanesi gösteriliyor. Kopyalama ve indirme tamamını alır.
Posta example.com'a, telefonlar 555-0100 bloğuna, adresler belgeleme ağlarına, kart numaraları yayımlanmış test BIN'lerine gider — buradaki her varsayılan, bir standardın ayırdığı bir aralıktır; bu yüzden üretilen hiçbir şey gerçek bir kişiye ait olamaz.
Doğrulayıcılarınızı geçen veriler
Üretilmiş test verisine yöneltilen alışıldık şikâyet sahte görünmeleri değil, düşmeleridir. Hiçbir ödeme kütüphanesinin kabul etmeyeceği bir kart numarası, bir banka formunun reddettiği bir IBAN, barkod okuyucunun okuyamadığı bir ISBN, sürüm hanesi rastgele baytların denk geldiği şey olan bir UUID. Sonunda fixture'ı elle düzeltirsiniz ve o noktada üreteç kazandırdığından fazlasına mal olmuştur.
Yayımlanmış bir standardın kontrol tanımladığı her değer burada doğru kontrolü taşır. Bu küçük bir hesap işidir ama verinin ne işe yaradığını değiştirir: gerçek doğrulamanızı ona yöneltebilirsiniz.
- Kart numaraları ISO/IEC 7812-1'in Luhn kontrol hanesini, kendisinden önceki haneler üzerinden hesaplanmış olarak taşır ve seçtiğiniz markanın yayımlanmış test BIN'i üzerine oturur.
- IBAN'lar ISO 7064 mod-97'yi sağlar — kontrol haneleri, yeniden sıralanmış ve harfleri açılmış sayının kalanı 1 olacak biçimde seçilir — ve ülkesinin kaydettiği tam uzunluktadır; bunu mod-97 tek başına yakalamaz.
- ISBN-13 ve EAN-13 değerleri 1 ve 3 ağırlıklarının dönüşümlü uygulandığı kontrol hanesini, ISBN sistemine ayrılmış iki GS1 önekinden birinin altında taşır.
- UUID'lerde RFC 9562'nin istediği sürüm dörtlüsü ve iki varyant biti bulunur; böylece ayrıştırıcı omuz silkmek yerine v4 ya da v7 der.
- Adresler, zaman damgaları, anlamsal sürümler ve para birimi kodları, yaklaşık bir biçimde değil, standartlarının tanımladığı biçimde yazılır.
Bunların hiçbiri veriyi gerçek yapmaz. Biçimsel olarak doğru yapar; bir fixture'ın dürüstçe iddia edebileceği tek özellik de budur.
Tohum ve neden her şeyin ondan ibaret olduğu
Her seferinde farklı satır veren bir üreteç oyuncaktır. Veri bir teste, bir gösterime ya da bir ekran görüntüsüne girdiği anda onu geri getirebilmeniz gerekir: sayfayı yeniledikten sonra, bir iş arkadaşınızın makinesinde, bir yıl sonraki sürekli tümleştirmede.
Bu yüzden buradaki rastgelelik tohumludur. Tohum sizin seçtiğiniz bir metindir ve aynı tohum, aynı şema ve aynı satır sayısı her yerde bayt bayt aynı çıktıyı üretir. Üreteç, splitmix64 ile tohumlanan xoshiro128**'dır; ikisi de referans uygulamalarıyla yayımlanmış algoritmalardır ve bu sayfa kendisiyle değil, o referanslardan aktarılan çıktıyla karşılaştırılarak sınanır.
seed "orders-2026" same rows, every time, everywhere seed "orders-2027" a completely different set field stream = hash(seed, field name) row N of a field depends on nothing but the seed, the name and N
Son satırı iki kez okumaya değer, çünkü aracı yalnızca yeniden üretilebilir değil kullanışlı kılan şey odur. Her alan, adına bağlı kendi akışından çeker. Bir sütun ekleyin, mevcut sütunların hepsi aynı çıkar. Satır sayısını yüzden bine çıkarın, ilk yüz satır zaten elinizdekilerdir. Dün depoya konan bir fixture, bugün şemayı genişlettikten sonra da eşleşir.
Ada bağlamanın dürüst bedeli, bir alanı yeniden adlandırmanın verisini değiştirmesidir; çünkü ad tohumun yarısıdır. Boş değer oranı bilerek muaf tutulan tek ayardır: bir değeri boşaltma kararı değer çekildikten sonra verilir, dolayısıyla boşları açmak bazı satırları siler ama kalanları kaydırmaz.
Bütün bunlardan doğrudan bir uyarı çıkar. Tohumlu bir üreteç tasarım gereği öngörülebilirdir ve asıl özellik budur. Ürettiği hiçbir şey parola, jeton ya da anahtar olarak kullanılmamalıdır. Bunun için platformun kriptografik kaynağından çeken bir üreteç kullanın.
Verileriniz gerçek olamasın diye ayrılmış aralıklar
Gerçek bir posta alan adında adres üreten bir üreteç, elinize dolu bir silah tutuşturur. Test takımları posta gönderir. Hazırlık ortamları bir noktada üretim SMTP'sine yönlenir. Yük testleri fixture'da yazan IP adresini döver. Değer birine aitse kaza ona ulaşır.
Standart kuruluşları bunu öngördü ve asla tahsis edilmeyeceği garanti edilen aralıklar ayırdı. Buradaki her varsayılan bunlardan birinden çeker:
- Posta, RFC 2606'nın kalıcı olarak ayırdığı example.com, example.net ve example.org adreslerine iner; RFC 6761'in eklediği .test, .example ve .invalid üst düzey alan adları da bunlara katılır.
- Telefon numaraları 555-0100 ile 555-0199 arasını kullanır; Kuzey Amerika numaralandırmasının kurmaca için ayırdığı blok budur — filmlerin bunu kullanmasının nedeni de odur.
- IPv4 adresleri RFC 5737'nin üç belgeleme ağı olan 192.0.2.0/24, 198.51.100.0/24 ve 203.0.113.0/24'ten, IPv6 adresleri ise RFC 3849 uyarınca 2001:db8::/32'den gelir.
- MAC adresleri, IEEE'nin asla tahsis etmeyeceğini garanti ettiği yerel yönetim bitini kaldırır; RFC 7042'nin belgeleme bloğu da sunulur, gerçi içinde yalnızca 256 adres vardır.
- Kart numaraları etkin bir ihraç aralığı üzerine değil, yayımlanmış dört test BIN'i üzerine kurulur; böylece Luhn'a göre geçerli bir numara gerçek bir kartla çakışamaz.
Bir nedeniniz olduğunda bunların her biri geçersiz kılınabilir: hazırlık ortamı için kendi alan adınız, ağınıza uyan bir CIDR bloğu. Varsayılan güvenli yanıttır; geçersiz kılma ise bilinçli olarak vereceğiniz bir karardır.
Adlar ve yerler, ABD Nüfus Sayım Bürosu'nun yayımladığı ad dağılımlarından ve tüzel yerleşim listesinden alınmıştır. Bunlar yaygın İngilizce adlardır; yani üretilen bir ad gerçek bir kişinin adıyla çakışabilir — nitekim her ad çakışabilir. Çıktıya olduğu gibi bakın: makul dizgeler, insanlar değil.
Birbirine başvuran alanlar
Birbirinden bağımsız sütunlar, bakıldığında dağılan satırlar üretir. Adı Dana Levy olan ve posta adresi adıyla ilgisi olmayan bir kullanıcı ekran görüntüsünde bozuk görünür; oluşturma damgasından önce gelen bir güncelleme damgası ise gerçek bir doğrulamayı düşürür.
Her çift için ayrı bir özel durum yerine tek bir düzenek vardır: başvuru aldığı işaretlenmiş her ayar, çift süslü parantez içinde başka bir alanın adını yazabilir ve o değer aynı satırdan doldurulur. Alanlar o zaman sizin sıraladığınız düzende değil bağımlılık düzeninde üretilir; başvuru döngüsü ise takılmak yerine şema hatası olarak bildirilir.
Bu, posta adresinden öteye geçer. Şablon alanı, başka sütunlardan istediğiniz her dizgeyi kurar, isterseniz harf durumunu da değiştirir. Bir tarih alanının alt ya da üst sınırı başka bir tarih alanının adını yazabilir; tutarlı bir zaman çizgisi böyle elde edilir. Ve başvurulan değer boşsa ona bağlı alan da boştur; şemanın hiç anmadığı bir varsayılan aralığa sessizce dönmez.
Dışarı almak: JSON, NDJSON, CSV, SQL
JSON apaçık seçenektir ve girintili ya da tek satır olarak çıkar. NDJSON — satır başına bir sıkışık nesne — günlük hatlarının ve akış içe aktarıcılarının beklediği biçimdir ve kaydı teker teker okuyan bir araca yapıştırılacak biçim budur.
CSV, RFC 4180'i izler: alanlar yalnızca virgül, tırnak ya da satır sonu içerdiğinde tırnağa alınır, içteki tırnak ikilenir ve satırlar CRLF ile biter. Hesap tablolarının ve veritabanı toplu yükleyicilerinin üzerinde anlaştığı biçim budur.
Üreteçlerin genelde savsakladığı yer SQL'dir, çünkü doğru yanıt lehçeye bağlıdır. Tanımlayıcı tırnaklaması farklıdır — PostgreSQL ve SQLite çift tırnak, MySQL ters tırnak, SQL Server köşeli parantez alır — ve her biri ad içinde kendi tırnak karakterini ikiler. Dizge sabitleri her yerde tek tırnağı ikiler, ancak MySQL, NO_BACKSLASH_ESCAPES ayarlı değilse ters eğik çizgiyi kaçış olarak okur; bu yüzden ters eğik çizgiyle biten bir Windows yolu kapanış tırnağını yutardı. Üçüncü ayrım mantıksal değerlerdir: PostgreSQL'de gerçek bir mantıksal tür vardır, diğerleri 1 ve 0 ister. Ayrıca SQL Server binden fazla satırlı bir tablo değer kurucusunu reddeder; bu yüzden büyük bir dışa aktarım, düşen tek bir deyim yerine birkaç deyim olarak yazılır.
PostgreSQL INSERT INTO "records" ("id", "ok") VALUES (1, TRUE);
MySQL INSERT INTO `records` (`id`, `ok`) VALUES (1, 1);
SQLite INSERT INTO "records" ("id", "ok") VALUES (1, 1);
SQL Server INSERT INTO [records] ([id], [ok]) VALUES (1, 1);Şema bir dosyadır
Kurucunun yanındaki panel, aynı şemanın JSON olarak yazılmış hâlidir ve iki yönde çalışır: alanları düzenlersiniz, panel güncellenir; bir şema yapıştırırsınız, kurucu ona uyar. Varsayılanında bırakılan seçenekler atlanır; böylece geri okuduğunuz şey, aracın sahip olduğu her düğme değil, sizin verdiğiniz kararlardır.
İçindeki tohumla birlikte bu dosya, eksiksiz yeniden üretim birimidir. Veriyi tüketen testin yanına koyun; fixture, kimsenin açıklayamadığı kocaman bir değer yığını yerine bir gözden geçirenin okuyabildiği ve bir iş arkadaşınızın yeniden üretebildiği bir şeye dönüşür.
Sıkça sorulan sorular
- Kredi kartı numaraları gerçek mi?
- Geçerliler ve gerçek değiller. Her biri doğru bir Luhn kontrol hanesi taşır, dolayısıyla bir ödeme kütüphanesi biçimini kabul eder; her biri etkin bir ihraç aralığı yerine yayımlanmış dört test BIN'inden biri üzerine kurulur, dolayısıyla birinin elindeki bir kartla çakışamaz. Hiçbir yerde ödeme onaylatmazlar.
- Aynı tohum gelecek yıl gerçekten aynı veriyi verir mi?
- Evet. Üreteç, davranışı değişebilecek bir tarayıcı arayüzü değil, sabit bir referans uygulaması olan yayımlanmış bir algoritmadır ve bu sayfa o referanstan aktarılan çıktıyla karşılaştırılarak sınanır. Hiçbir yerde saat okunmaz: tarih aralıkları şemadaki açık değerlerdir. Şema JSON'unu ve içindeki tohumu saklayın, satırlar aynen geri gelir.
- Sütun eklediğimde neden başka hiçbir şey değişmedi?
- Çünkü her alan, tohuma ve alan adına bağlı kendi akışından çeker. Bu bilinçlidir: şemayı her genişlettiğinizde yeniden karılan bir fixture'ı bir depoda tutamazsınız. Aynı özellik, satır sayısını artırmanın önceki satırlara dokunmamasını sağlar.
- Bir alanın adını değiştirdim ve verisi değişti.
- Bu da aynı tasarımdan çıkar — alan adı, akış anahtarının yarısıdır. Değerleri korumak istiyorsanız sütun adını akışın ilerisinde değiştirin ya da yeni çekilişi kabul edin. Şema dosyasının taşımak zorunda kalacağı gizli bir tanımlayıcı olmadan hem ad değişimine hem sıra değişimine dayanıklılığı birlikte elde etmenin yolu yok.
- Bununla parola ya da API anahtarı üretebilir miyim?
- Hayır. Buradaki her şey tohumlu bir sözde rastgele üreteçten gelir; bu üreteç tasarım gereği öngörülebilirdir ve çıktının yeniden üretilebilir olmasının nedeni tam da budur. Bir sırrın platformun kriptografik kaynağından gelmesi gerekir. Bunun için ayrı bir jeton üreteci kullanın.
- Posta adresini ada nasıl uydururum?
- Bir şablon alanı ekleyin ve diğer sütun adlarını çift süslü parantez içinde yazın — örneğin {{first_name}}.{{last_name}}@example.com — sonra harf dönüşümünü küçük harfe ayarlayın. Alanlar bağımlılık düzeninde üretildiği için şablon, listede kendisinden sonra gelen bir sütunun adını da yazabilir.
- Kaç satır üretebilir?
- En çok kırk alanda on bin satır. Bu boyutta üretim ana iş parçacığında kalabilecek kadar hızlıdır; asıl rahatsız edici olan ortaya çıkan metindir. Bu yüzden panel kısaltılmış bir önizleme gösterirken kopyalama ve indirme tamamını alır.
- Bunlardan herhangi biri tarayıcımdan çıkıyor mu?
- Hayır. Üreteç, ad derlemi ve bütün çıktı biçimleri sayfada JavaScript olarak çalışır. Hiçbir sunucu çağrısı yoktur ve şemaya yazdığınız hiçbir şey hiçbir yere gönderilmez.