{"id":8299,"date":"2017-06-07T21:26:37","date_gmt":"2017-06-07T19:26:37","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=8299"},"modified":"2021-05-20T16:05:21","modified_gmt":"2021-05-20T14:05:21","slug":"universally-unique-identifier-uuid-bzw-globally-unique-identifier-guid-mit-java-erzeugen","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=8299","title":{"rendered":"Universally Unique Identifier (UUID) bzw.  Globally Unique IDentifier (GUID) mit Java erzeugen"},"content":{"rendered":"<p>Ein <a href=\"https:\/\/de.wikipedia.org\/wiki\/Universally_Unique_Identifier\" target=\"_blank\" rel=\"noopener\">Universally Unique Identifier (UUID)<\/a> ist ein Standard f\u00fcr Identifikatoren. Wer eindeutige einmalige IDs braucht, kann die in Java einfach erzeugen. Es gibt da ab 1.5 die Klasse <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/util\/UUID.html#randomUUID--\" target=\"_blank\" rel=\"noopener\">UUID<\/a> mit der man einfach diese IDs erzeugen kann. <\/p>\n<p>Die <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc4122\" target=\"_blank\" rel=\"noopener\">RFC 4122<\/a> beschreibt den Aufbau und den Algorithmus f\u00fcr die Erzeugung. Das ganze ist schon ziemlich sicher, da die <a href=\"https:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/security\/SecureRandom.html\" target=\"_blank\" rel=\"noopener\">SecureRandom<\/a> Klasse in Java verwendet wird. <\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/UUID.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/UUID.png\" alt=\"\" width=\"2732\" height=\"2048\" class=\"aligncenter size-full wp-image-8307\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/UUID.png 2732w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/UUID-300x225.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/UUID-768x576.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/UUID-1024x768.png 1024w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<p>Habe mich gefragt, ob die auch wirklich eindeutig sind. Daf\u00fcr mal eben einen kleinen JUnit Test geschrieben der 1 Millionen UUIDs erzeugt und testet ob zwei gleiche erzeugt werden. Nach 4889,556 Sekunden das Ergebnis:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-20.52.40.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-20.52.40.png\" alt=\"\" width=\"481\" height=\"160\" class=\"aligncenter size-full wp-image-8300\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-20.52.40.png 481w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-20.52.40-300x100.png 300w\" sizes=\"auto, (max-width: 481px) 100vw, 481px\" \/><\/a><\/p>\n<p>Hier die Testklasse:<\/p>\n<pre class=\"lang:java decode:true \" >\r\n\r\npackage de.wenzlaff.tools;\r\n\r\nimport static org.junit.Assert.fail;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport java.util.UUID;\r\n\r\nimport org.junit.Test;\r\n\r\npublic class TestUuid {\r\n\r\n\tprivate static final int MAX = 1000000;\r\n\r\n\t@Test\r\n\tpublic void testIdGen() {\r\n\r\n\t\tList&lt;String&gt; c = new ArrayList&lt;&gt;();\r\n\r\n\t\tfor (int i = 0; i &lt; MAX; i++) {\r\n\t\t\tString id = UUID.randomUUID().toString();\r\n\t\t\tif (c.contains(id)) {\r\n\t\t\t\tfail(\"Doppelte ID \" + id + \" generiert!\");\r\n\t\t\t}\r\n\t\t\tc.add(id);\r\n\t\t\tSystem.out.println(id);\r\n\t\t}\r\n\t}\r\n}<\/pre>\n<p>Die CPU war schon teilweise zu 100% ausgelastet, zumindestens einer der acht Kerne:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-19.34.11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-19.34.11.png\" alt=\"\" width=\"559\" height=\"952\" class=\"aligncenter size-full wp-image-8301\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-19.34.11.png 559w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2017\/06\/Bildschirmfoto-2017-06-07-um-19.34.11-176x300.png 176w\" sizes=\"auto, (max-width: 559px) 100vw, 559px\" \/><\/a><\/p>\n<p>Ein UUID in ihrer Normalform sieht beispielsweise so aus: <!--more--><\/p>\n<pre class=\"lang:default decode:true \" >\r\n4ca875fe-6643-43fb-8cf4-ac05f1d06d67\r\n2ea4d266-68e7-49ed-b927-c25e6a3a6909\r\neb24cbf6-daac-4ba3-8f08-fea35d04121b\r\ne59fd813-61c1-460a-a428-c679241db823\r\n47f39849-9096-4e48-9aa7-4b251c995155\r\nf89489d1-d0ba-4935-8447-dee46dffcaaf\r\n7686a777-95cf-40ff-8255-88f503eb86b4\r\n8c5b08ed-e450-4e28-a98c-a1d369a06afe\r\n4a464282-6034-4b3b-990f-7527cedb8133\r\nc2e58ff2-6d55-4e64-8bc4-5a57f6c5f1ad\r\n79577947-93b6-4c45-8b42-38b1632aa4b9\r\n50d35068-7cb2-4902-a5a5-427fa361a879\r\n7f48e781-928f-4213-bd55-d00d54cd57c9\r\n0be5cbb0-fcb1-4ad8-a1e6-66ff36563325\r\n6fbc9e62-119e-42c1-a855-793a2d2fafc0\r\n1792a513-e9de-4894-b6f2-c0992e14ef94\r\nfeb931bb-5b7f-4e3a-b1ff-1f295b127a83\r\na84cfe70-f118-4ec8-b067-2ff1ccecce7e\r\n9c5e8efc-04e1-4dde-b44a-109f678aecf8\r\n953ae098-923b-4fbc-8bcc-76cfc418b171\r\n7eb6470d-b199-4454-9344-493e16587bf1\r\nb82ed01a-1f33-4495-8c5b-d4c41b7c2c25\r\n9dceb9ca-a955-4416-97fa-f9b8b406c667\r\n548b64a0-fd2b-4559-87f8-cefe5b559c83\r\nba40af96-0172-401f-a3cf-4245846003f7\r\ncfe78533-6a1a-4fcb-b4b0-fb6216361334\r\n773fed57-0831-4d29-890e-52fb37f66af3\r\n0c022ad1-a649-40e0-9ef3-3d9b7d9fecf2\r\n9d0d8179-be5f-448f-a3a7-722d71927122\r\nbe89d391-11dd-49c9-b1c1-c9eb8315e30a\r\nce6e32f1-3d23-4a41-9260-beae98af470f\r\ne25bbfc3-c8f0-4883-93af-626f22e2f7bd\r\nd6155be7-8dcd-4c09-b451-2b546b01c42d\r\n5689a990-2d67-428c-bc1c-10781bfa286c\r\n7d858ccc-1936-4dd4-89a5-9b46e63afa40\r\n<\/pre>\n<p>Wie lange l\u00e4uft bei Euch der Test? Wie lange l\u00e4uft er auf einem Raspberry Pi?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein Universally Unique Identifier (UUID) ist ein Standard f\u00fcr Identifikatoren. Wer eindeutige einmalige IDs braucht, kann die in Java einfach erzeugen. Es gibt da ab 1.5 die Klasse UUID mit der man einfach diese IDs erzeugen kann. Die RFC 4122 beschreibt den Aufbau und den Algorithmus f\u00fcr die Erzeugung. Das ganze ist schon ziemlich sicher, &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=8299\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eUniversally Unique Identifier (UUID) bzw.  Globally Unique IDentifier (GUID) mit Java erzeugen\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,5,2842],"tags":[2865,2864,2866,2863,2178,2862,2867],"class_list":["post-8299","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-java","category-strichmaenchen","tag-128-bit","tag-eindeutige","tag-erzeugung","tag-id","tag-java","tag-uuid","tag-zufalls-id"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/8299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8299"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/8299\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8299"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}