UUID জেনারেটর
ডেভcrypto.randomUUID দিয়ে ক্রিপ্টোগ্রাফিকভাবে এলোমেলো UUID (RFC 4122 v4) তৈরি করুন।
এই পৃষ্ঠায়
UUID কী?#
একটি UUID (Universally Unique Identifier, Microsoft সিস্টেমে GUID নামেও পরিচিত) হলো একটি ১২৮-বিট শনাক্তকারী যা 32টি হেক্স অঙ্ক হিসেবে রেন্ডার করা হয় 8-4-4-4-12 গ্রুপে বিভক্ত, উদাহরণস্বরূপ c9bf1d4d-7d4f-4b3a-8b2c-1e5f6a7b8c9d। ধারণাটি সরল কিন্তু শক্তিশালী: চাহিদামাফিক শনাক্তকারী তৈরি করুন, কোনো কেন্দ্রীয় কর্তৃপক্ষ ছাড়াই এবং মেশিনগুলোর মধ্যে কোনো সমন্বয় ছাড়াই, এবং এখনও দুটির সংঘর্ষের সম্ভাবনা কার্যকরভাবে শূন্য হয়। সেই বৈশিষ্ট্যই UUID-কে বিতরণকৃত ডেটাবেসের জন্য ডিফল্ট প্রাথমিক-কী কৌশল, প্রায় প্রতিটি JSON API রিসোর্সে id ফিল্ড, কোরিলেশন ID যা মাইক্রোসার্ভিস জুড়ে লগ লাইনগুলোকে একসাথে বাঁধে, এবং আপলোড করা ব্লবগুলোর ফাইলের নাম করে তোলে।
এই পৃষ্ঠাটি RFC 4122 সংস্করণ 4 UUID তৈরি করে — এলোমেলো বিট থেকে নির্মিত ভেরিয়েন্ট। সংস্করণ 4 হলো আপনি প্রায় প্রতিটি আধুনিক ক্ষেত্রে চান: এটি কোনো মেশিন MAC ঠিকানা বহন করে না (v1-এর মতো), কোনো নেমস্পেস অনুক্রম সন্নিবেশ করে না (v3/v5-এর মতো), এবং অনন্যতার জন্য সম্পূর্ণভাবে ক্রিপ্টোগ্রাফিক এলোমেলোতার উপর নির্ভর করে। আপনি একটি একক UUID বা একসাথে ১০,০০০ পর্যন্ত একটি ব্যাচ তৈরি করতে পারেন, ছোট হাতের বা বড় হাতের অক্ষরে, সম্পূর্ণ আপনার ব্রাউজারে।
৩২টি হেক্স অঙ্কের দুটি সত্যিই এলোমেলো নয় — সেগুলো UUID-এর নিজস্ব ধরন ঘোষণা করে। অবস্থান 14-এ সংস্করণ নিবল (তৃতীয় গ্রুপের প্রথম অক্ষর) সর্বদা 4, এবং অবস্থান 19-এ ভেরিয়েন্ট নিবল (চতুর্থ গ্রুপের প্রথম অক্ষর) সর্বদা 8, 9, a, বা b। এই কারণেই আপনি এই পৃষ্ঠায় যা দেখেন প্রতিটি মান পড়া যায় xxxxxxxx-xxxx-4xxx-[89ab]xxx-xxxxxxxxxxxx। সেই দুটি নির্দিষ্ট অবস্থান একটি স্ব-বর্ণনামূলক ফিঙ্গারপ্রিন্ট হিসেবে দ্বিগুণ কাজ করে: এই আকৃতির সাথে মেলে এমন যেকোনো স্ট্রিং একটি v4 UUID, এবং একটি দ্রুত রেগেক্স মিলিয়ন মিলিয়ন যাচাই করতে পারে।
কীভাবে ব্যবহার করবেন#
- উপরের সংখ্যা সংখ্যা ফিল্ডটি আপনি কতগুলো UUID চান তাতে সেট করুন — ১ থেকে ১০,০০০ পর্যন্ত যেকোনোটি। ফিল্ডটি সেই সীমায় ক্ল্যাম্প করা হয়।
- আপনার যদি সম্পূর্ণ বড় হাতের আউটপুট প্রয়োজন হয় তবে বড় হাতের অক্ষর টিক দিন (কিছু লিগেসি সিস্টেম এবং Microsoft GUID রীতি
C9BF1D4D-…পছন্দ করে)। বেশিরভাগ আধুনিক স্ট্যাক যে ছোট হাতের ডিফল্ট ব্যবহার করে তার জন্য এটি অচিহ্নিত রাখুন। - তৈরি ক্লিক করুন। মানগুলো মনোস্পেস আউটপুট এলাকায় দেখা যায়, প্রতি লাইনে একটি।
- পুরো ব্যাচটি আপনার ক্লিপবোর্ডে কপি করতে কপি ক্লিক করুন, একটি SQL
INSERT, একটি CSV, একটি টেস্ট ফিক্সচার, বা একটি সিড স্ক্রিপ্টে পেস্ট করার জন্য প্রস্তুত। - আপনার যখনই একটি নতুন ব্যাচ প্রয়োজন তৈরি আবার ক্লিক করুন — প্রতিটি ক্লিক নতুন এলোমেলো বিট টানে এবং এমন মান তৈরি করে যা আগে কখনো বিদ্যমান ছিল না।
প্রধান বৈশিষ্ট্য#
- প্রকৃত ক্রিপ্টোগ্রাফিক এলোমেলোতা। নিরাপদ প্রসঙ্গে ব্রাউজারের
crypto.randomUUID()ব্যবহার করে, একটিcrypto.getRandomValuesফলব্যাক সহ যা সংস্করণ এবং ভেরিয়েন্ট বিটে রিজেকশন স্যাম্পলিং প্রয়োগ করে —Math.random()নয়, যা শনাক্তকারীর জন্য উপযুক্ত নয়। - ব্যাচ তৈরি। এক ক্লিকে ১০,০০০ পর্যন্ত UUID, প্রতি লাইনে একটি, যাতে আপনি নিজে স্ক্রিপ্ট না করেই একটি ডেটাবেস বা ফিক্সচার ফাইল সিড করতে পারেন।
- ছোট হাতের বা বড় হাতের। একটি টগল উভয় রীতি ঢেকে রাখে।
- RFC 4122 v4 সম্মত। সংস্করণ নিবল সর্বদা
4এবং ভেরিয়েন্ট নিবল সর্বদা8/9/a/b, তাই প্রতিটি মান প্রমিল v4 রেগেক্সের বিপরীতে যাচাই করে। - ১০০% ক্লায়েন্ট-সাইড। কোনো ব্যাকএন্ড নেই, কোনো টেলিমেট্রি নেই। আপনি এখানে যে UUID তৈরি করেন সেগুলো কোথাও রেকর্ড করা হয় না — সেগুলো আবির্ভূত হওয়ার সাথে সাথে আপনার।
ব্যবহারের উদাহরণ#
সংখ্যা ডিফল্ট 5-এ রেখে এবং বড় হাতের অক্ষর অচিহ্নিত রেখে তৈরি ক্লিক করুন, এবং আপনি এইরকম পাঁচটি লাইন পান (আপনার প্রকৃত মানগুলো আলাদা হবে — সেগুলো এলোমেলো):
7f3a9c2e-1b4d-4e8f-a6c3-9d2b8e1f0a47
2c8d4f1a-9e3b-47a2-8c6d-1f5e9a0b3c28
a1b2c3d4-e5f6-4789-abcd-ef0123456789
9e8d7c6b-5a4f-3210-ba98-76543210fedc
4f3e2d1c-0b9a-8765-4321-fedcba987654
যেকোনো লাইনের তৃতীয় গ্রুপটি কাছে দেখুন: এটি সর্বদা 4 দিয়ে শুরু হয়। চতুর্থ গ্রুপটি দেখুন: এটি সর্বদা 8, 9, a, বা b দিয়ে শুরু হয়। সেই দুটি অক্ষর এলোমেলো নয় — সেগুলো হলো সংস্করণ এবং ভেরিয়েন্ট মার্কার, এবং সেগুলোই কারণ যে একটি এক-লাইন যাচাইকারী নিশ্চিত করতে পারে একটি স্ট্রিং একটি প্রকৃত v4 UUID।
আপনি যদি বড় হাতের অক্ষর টিক দিন এবং আবার তৈরি করেন, একই আকৃতি বড় হাতের অক্ষরে বেরিয়ে আসে, যেমন 7F3A9C2E-1B4D-4E8F-A6C3-9D2B8E1F0A47 — অভিন্ন বিট, কেবল সেই সিস্টেমের জন্য রেন্ডার করা হয়েছে যা বড় হাতের GUID আশা করে।
প্রশ্নোত্তর#
একটি v4 UUID সত্যিই কতটা অনন্য? আমি কি কখনো একটি নকল পাব?#
সংখ্যাগুলো দ্রুত অযৌক্তিক হয়ে যায়। একটি একক v4 UUID-এ প্রকৃত এলোমেলোতার 122 বিট থাকে (128 থেকে 4টি সংস্করণ বিট এবং 2টি ভেরিয়েন্ট বিট বাদ দিলে)। একটি সংঘর্ষের ৫০% সম্ভাবনার জন্যও আপনাকে প্রায় 2.71 × 10^36টি UUID তৈরি করতে হবে — এটি মহাবিশ্বের বয়সের চেয়ে বেশি সময় ধরে প্রতি সেকেন্ডে এক বিলিয়ন বিলিয়ন বিলিয়ন। যেকোনো বাস্তবসম্মত ডেটাবেস বা সিস্টেমের জন্য, আপনি সংঘর্ষগুলোকে অসম্ভব হিসেবে বিবেচনা করতে পারেন, এবং সেগুলোর জন্য চেক করার প্রয়োজন নেই।
এই UUID-গুলোকে ডেটাবেস প্রাথমিক কী হিসেবে ব্যবহার করা কি নিরাপদ?#
হ্যাঁ — সংস্করণ 4 এটির জন্য সবচেয়ে সাধারণ পছন্দ ঠিক কারণ এটির কোনো সমন্বয়ের প্রয়োজন নেই। একমাত্র সতর্কতা হলো সূচক খণ্ডায়ন: সম্পূর্ণ এলোমেলো কীগুলো একটি B-tree জুড়ে ছড়িয়ে পড়ে, তাই একটি অত্যন্ত উচ্চ-লেখার PostgreSQL বা MySQL টেবিলে আপনি একটি UUIDv7 (সময়-ক্রমানুসারে) ভেরিয়েন্ট পছন্দ করতে পারেন। অ্যাপ্লিকেশন-স্তরের রিসোর্স ID, কোরিলেশন ID, এবং বেশিরভাগ টেবিলের জন্য, সরল v4 ঠিক আছে।
কেন কেবল Math.random() ব্যবহার করে একটি UUID তৈরি করব না?#
কারণ Math.random() ক্রিপ্টোগ্রাফিকভাবে সাউন্ড নয় — এর আউটপুট যথেষ্ট অনুমানযোগ্য হতে পারে যে একজন আক্রমণকারী যদি কয়েকটি ID পর্যবেক্ষণ করে তবে অন্যগুলো অনুমান করতে পারে। এই টুলটি ইচ্ছাকৃতভাবে crypto.randomUUID() (এবং সঠিক সংস্করণ/ভেরিয়েন্ট পরিচালনার সাথে একটি crypto.getRandomValues ফলব্যাক) ব্যবহার করে, যা অপারেটিং সিস্টেমের CSPRNG থেকে টানে। যেকোনো কিছুর জন্য যা একজন ব্যবহারকারী, সেশন, বা রিসোর্স শনাক্ত করে, সেই পার্থক্যটি গুরুত্বপূর্ণ।
আমি কি এখানে সংস্করণ 1, সংস্করণ 5, বা নামযুক্ত UUID তৈরি করতে পারি?#
না — এই পৃষ্ঠাটি ইচ্ছাকৃতভাবে কেবল v4, কারণ v4 প্রকৃত ব্যবহারের ক্ষেত্রের অপ্রতিরোধ্য সংখ্যাগরিষ্ঠতা ঢেকে রাখে এবং একটি এলোমেলো উৎসের বাইরে কোনো ইনপুট প্রয়োজন নেই। আপনার যদি একটি নাম-ভিত্তিক v5 UUID প্রয়োজন (একটি নাম এবং একটি নেমস্পেস থেকে নির্ধারিত), সেটি একটি ভিন্ন গণনা এবং আপনার অ্যাপ্লিকেশন কোড বা একটি নিবেদিত টুলের অন্তর্গত।