അവലോകനങ്ങൾക്ക് ട്വിറ്റർ സ്നോഫ്ലേക്ക് ഐഡി ഉപകരണം സൃഷ്ടിക്കുക

വിതരണ സംവിധാനങ്ങളിൽ ഉപയോഗിക്കുന്ന 64-ബിറ്റ് ഐഡന്റിഫയർസ് ആയ ട്വിറ്റർ സ്നോഫ്ലേക്ക് ഐഡികൾ സൃഷ്ടിക്കുകയും അവയെ വിശകലനം ചെയ്യുകയും ചെയ്യുക. ഈ ഉപകരണം പുതിയ സ്നോഫ്ലേക്ക് ഐഡികൾ സൃഷ്ടിക്കാൻ നിങ്ങൾക്ക് അനുവദിക്കുന്നു, നിലവിലുള്ളവ പാഴ്‌സുചെയ്യുകയും ചെയ്യുന്നു, അവയുടെ ടൈംസ്റ്റാമ്പ്, മെഷീൻ ഐഡി, സീക്വൻസ് നമ്പർ ഘടകങ്ങൾ എന്നിവയിൽ അവലോകനങ്ങൾ നൽകുന്നു.

സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ

സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ

Optional: Unix timestamp in milliseconds (defaults to current time)
📚

വിവരണം

സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ: ഏകീകൃത വിതരണ സംവിധാനം തിരിച്ചറിയലുകൾ സൃഷ്ടിക്കുക

സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ എന്താണ്?

ഒരു സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ വ്യാപിതമായ സംവിധാനങ്ങൾക്ക് ഏകീകൃത തിരിച്ചറിയലുകൾ സൃഷ്ടിക്കുന്നു, ഇത് വലിയ തോതിലുള്ള ഡാറ്റ പ്രോസസ്സിംഗിന് കൈകാര്യം ചെയ്യാൻ ട്വിറ്റർ വികസിപ്പിച്ചെടുത്തതാണ്. ഈ ശക്തമായ ഏകീകൃത ഐഡി ജനറേറ്റർ ഒരു ടൈംസ്റ്റാമ്പ്, മെഷീൻ ഐഡി, സീക്വൻസ് നമ്പർ എന്നിവയാൽ രൂപീകരിച്ച 64-ബിറ്റ് ഇന്റേജറുകൾ ഉൽപ്പാദിപ്പിക്കുന്നു, ഇത് വിതരണ സംവിധാനങ്ങളിൽ ഏകീകൃതത്വം ഉറപ്പാക്കുന്നു സർവറുകൾക്കിടയിൽ സഹകരണമില്ലാതെ.

ഞങ്ങളുടെ സൗജന്യ ഓൺലൈൻ സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ ഉപകരണം നിങ്ങൾക്ക് സ്നോഫ്ലേക്ക് ഐഡുകൾ സൃഷ്ടിക്കുകയും പാഴ്സുചെയ്യുകയും ഉടൻ ചെയ്യാൻ അനുവദിക്കുന്നു, ഇത് മൈക്രോസർവീസുകൾ, വിതരണ ഡാറ്റാബേസുകൾ, ഉയർന്ന throughput ആപ്ലിക്കേഷനുകൾ എന്നിവയുമായി പ്രവർത്തിക്കുന്ന ഡെവലപ്പർമാർക്കായി അനുയോജ്യമാണ്.

സ്നോഫ്ലേക്ക് ഐഡി ജനറേഷൻ എങ്ങനെ പ്രവർത്തിക്കുന്നു

സ്നോഫ്ലേക്ക് ഐഡുകൾ ഏകീകൃതത്വം ഉറപ്പാക്കുന്ന സൂക്ഷ്മമായി രൂപകൽപ്പന ചെയ്ത ഘടനയുള്ള 64-ബിറ്റ് ഇന്റേജറുകളാണ്:

  • 41 ബിറ്റ്: ടൈംസ്റ്റാമ്പ് (ഒരു കസ്റ്റം എപ്പോക്കിൽ നിന്ന് മില്ലിസെക്കൻഡുകൾ)
  • 10 ബിറ്റ്: മെഷീൻ ഐഡി (ഡാറ്റാ സെന്റർ ഐഡിന് 5 ബിറ്റ്, വർകർ ഐഡിന് 5 ബിറ്റ്)
  • 12 ബിറ്റ്: സീക്വൻസ് നമ്പർ

വിതരണ ഐഡി ഘടന ഏകദേശം 4,096 ഏകീകൃത ഐഡുകൾ ഓരോ മില്ലിസെക്കൻഡിലും ഓരോ മെഷീനിൽ സൃഷ്ടിക്കാൻ അനുവദിക്കുന്നു, ഇത് ഉയർന്ന throughput വിതരണ സംവിധാനങ്ങൾക്ക് അനുയോജ്യമാണ്.

ഞങ്ങളുടെ സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ ഉപകരണം എങ്ങനെ ഉപയോഗിക്കാം

ഏകീകൃത സ്നോഫ്ലേക്ക് ഐഡുകൾ സൃഷ്ടിക്കാൻ ഈ ലളിതമായ ഘട്ടങ്ങൾ പിന്തുടരുക:

  1. കസ്റ്റം എപ്പോക്ക് സജ്ജമാക്കുക (ഐച്ഛികം): ഡിഫോൾട്ട് ട്വിറ്റർ എപ്പോക്ക് (2010-11-04T01:42:54.657Z) ഉപയോഗിക്കുക അല്ലെങ്കിൽ നിങ്ങളുടെ സ്വന്തം സജ്ജമാക്കുക
  2. മെഷീൻ ഐഡികൾ കോൺഫിഗർ ചെയ്യുക: മെഷീൻ ഐഡി (0-31)യും ഡാറ്റാ സെന്റർ ഐഡി (0-31)യും നൽകുക
  3. ഐഡി സൃഷ്ടിക്കുക: പുതിയ ഏകീകൃത സ്നോഫ്ലേക്ക് ഐഡി സൃഷ്ടിക്കാൻ "സൃഷ്ടിക്കുക" ക്ലിക്ക് ചെയ്യുക
  4. ഫലങ്ങൾ കാണുക: സൃഷ്ടിച്ച ഐഡിയും അതിന്റെ ഘടകങ്ങളുടെ വിശദീകരണവും കാണുക

നിലവിലുള്ള സ്നോഫ്ലേക്ക് ഐഡുകൾ പാഴ്സുചെയ്യുക

ഒരു സ്നോഫ്ലേക്ക് ഐഡി ഡികോഡ് ചെയ്യാൻ, "പാഴ്സ് ഐഡി" ഫീൽഡിൽ അത് നൽകുക, ടൈംസ്റ്റാമ്പ്, മെഷീൻ ഐഡി, സീക്വൻസ് ഘടകങ്ങൾ കാണാൻ "പാഴ്സ്" ക്ലിക്ക് ചെയ്യുക.

സ്നോഫ്ലേക്ക് ഐഡി ജനറേഷൻ ഫോർമുല

സ്നോഫ്ലേക്ക് ഐഡി ആൽഗോരിതം ബിറ്റ്‌വൈസ് പ്രവർത്തനങ്ങൾ ഉപയോഗിച്ച് ഏകീകൃത തിരിച്ചറിയലുകൾ നിർമ്മിക്കുന്നു:

1ID = (timestamp << 22) | (datacenterId << 17) | (workerId << 12) | sequence
2

ഫോർമുല ഘടകങ്ങൾ:

  • timestamp: എപ്പോക്കിൽ നിന്ന് മില്ലിസെക്കൻഡുകളുടെ എണ്ണം
  • datacenterId: ഡാറ്റാ സെന്റർ തിരിച്ചറിയുന്ന 5-ബിറ്റ് ഇന്റേജർ (0-31)
  • workerId: വർകർ മെഷീൻ തിരിച്ചറിയുന്ന 5-ബിറ്റ് ഇന്റേജർ (0-31)
  • sequence: ഒരു മില്ലിസെക്കൻഡിൽ നിരവധി ഐഡുകൾക്കായി 12-ബിറ്റ് ഇന്റേജർ (0-4095)

സ്നോഫ്ലേക്ക് ഐഡി കണക്കാക്കൽ പ്രക്രിയ

സ്നോഫ്ലേക്ക് ഐഡി ജനറേഷൻ ആൽഗോരിതം ഈ കൃത്യമായ ഘട്ടങ്ങൾ പിന്തുടരുന്നു:

  1. നിലവിലെ ടൈംസ്റ്റാമ്പ് നേടുക: മില്ലിസെക്കൻഡുകളിൽ നിലവിലെ സമയം വീണ്ടെടുക്കുക
  2. ക്രോനോളജിക്കൽ ഓർഡർ ഉറപ്പാക്കുക: ടൈംസ്റ്റാമ്പ് അവസാനമായി ഉപയോഗിച്ച ടൈംസ്റ്റാമ്പ് കടന്നുപോകുന്നതായി ഉറപ്പാക്കുക
  3. സമാന ടൈംസ്റ്റാമ്പ് കൈകാര്യം ചെയ്യുക: ടൈംസ്റ്റാമ്പ് മുമ്പത്തെത് പോലെ ആണെങ്കിൽ, സീക്വൻസ് നമ്പർ വർദ്ധിപ്പിക്കുക
  4. ഓവർഫ്ലോ തടയുക: സീക്വൻസ് 4096-ൽ എത്തുകയാണെങ്കിൽ, അടുത്ത മില്ലിസെക്കൻഡ് വരെ കാത്തിരിക്കുക
  5. ഘടകങ്ങൾ സംയോജിപ്പിക്കുക: അന്തിമ ഏകീകൃത ഐഡി സൃഷ്ടിക്കാൻ ബിറ്റ്‌വൈസ് പ്രവർത്തനങ്ങൾ ഉപയോഗിക്കുക

ഈ പ്രക്രിയ ഓരോ മെഷീനിലും ഏകീകൃതമായി വർദ്ധിക്കുന്ന ഐഡുകൾ ഉറപ്പാക്കുന്നു, അതേസമയം വിതരണ സംവിധാനങ്ങളിൽ ആഗോള ഏകീകൃതത്വം നിലനിര്‍ത്തുന്നു.

സ്നോഫ്ലേക്ക് ഐഡി ഉപയോഗക്കേസുകളും ആപ്ലിക്കേഷനുകളും

സ്നോഫ്ലേക്ക് ഐഡുകൾ വിവിധ വിതരണ കമ്പ്യൂട്ടിംഗ് സാഹചര്യങ്ങളിൽ മികച്ചതാണ്:

പ്രാഥമിക ഉപയോഗക്കേസുകൾ

  1. വിതരണ സംവിധാനങ്ങൾ: ഏകീകൃത ഐഡുകൾ സൃഷ്ടിക്കുക, നിരവധി മെഷീനുകളിൽ സഹകരണമില്ലാതെ
  2. ഉയർന്ന വോളിയം ഡാറ്റ പ്രോസസ്സിംഗ്: വലിയ ഡാറ്റാസെറ്റുകൾക്കായി ക്രമീകരിക്കാവുന്ന ഐഡുകൾ സൃഷ്ടിക്കുക
  3. മൈക്രോസർവീസുകൾ ആർക്കിടെക്ചർ: വ്യത്യസ്ത സേവനങ്ങളിൽ ഏകീകൃത തിരിച്ചറിയലുകൾ ഉറപ്പാക്കുക
  4. ഡാറ്റാബേസ് ഷാർഡിംഗ്: ഫലപ്രദമായ ഡാറ്റാ പാർട്ടീഷനിംഗിന് ടൈംസ്റ്റാമ്പ് അല്ലെങ്കിൽ മെഷീൻ ഐഡി ഘടകങ്ങൾ ഉപയോഗിക്കുക

യാഥാർത്ഥ്യ ആപ്ലിക്കേഷനുകൾ

  • സോഷ്യൽ മീഡിയ പ്ലാറ്റ്ഫോമുകൾ: ട്വിറ്റർ, ഇൻസ്റ്റാഗ്രാം പോസ്റ്റ്, ഉപയോക്തൃ ഐഡുകൾക്കായി
  • ഇ-കൊമേഴ്‌സ് സിസ്റ്റങ്ങൾ: ഓർഡർ ട്രാക്കിംഗ്, ഇൻവെന്ററി മാനേജ്മെന്റ്
  • ഐഒടി ഡാറ്റ ശേഖരണം: ഉപകരണം ഇവന്റ് ലോഗിംഗ്, സെൻസർ ഡാറ്റ
  • ഫിനാൻഷ്യൽ സിസ്റ്റങ്ങൾ: ഇടപാട് പ്രോസസ്സിംഗ്, ഓഡിറ്റ് ട്രെയിലുകൾ

സ്നോഫ്ലേക്ക് ഐഡി ബദലുകളും താരതമ്യങ്ങളും

സ്നോഫ്ലേക്ക് ഐഡുകൾ ശക്തമായവയായിരിക്കുമ്പോൾ, മറ്റ് ഏകീകൃത ഐഡി ജനറേഷൻ സിസ്റ്റങ്ങൾ ഉൾപ്പെടുന്നു:

ബദൽ ഐഡി സിസ്റ്റങ്ങൾ

  1. UUID (യൂണിവേഴ്സലി യൂണിക് ഐഡന്റിഫയർ): ക്രമീകരണ ആവശ്യങ്ങൾ ഇല്ലാതെ വിതരണ ജനറേഷനിന് മികച്ചത്
  2. ഓട്ടോ-ഇൻക്രിമെന്റിംഗ് ഡാറ്റാബേസ് ഐഡികൾ: ഏകീകൃത ഡാറ്റാബേസ് ഇൻസ്റ്റൻസുകൾക്ക് പരിമിതമായ ലളിതമായ പരിഹാരം
  3. ULID (യൂണിവേഴ്സലി യൂണിക് ലെക്സിക്കോഗ്രാഫിക്കലി ക്രമീകരിക്കാവുന്ന ഐഡന്റിഫയർ): സ്നോഫ്ലേക്ക് പോലെയുള്ള ബേസ്32 എൻകോഡിങ്ങുമായി
  4. NanoID: വെബ് ആപ്ലിക്കേഷനുകൾക്കായി സമ്പ്രദായിക, URL-സുരക്ഷിതമായ ഏകീകൃത സ്ട്രിംഗ് ജനറേറ്റർ

സ്നോഫ്ലേക്ക് ഐഡി പരിധികളും പരിഗണനകളും

സ്നോഫ്ലേക്ക് ഐഡി പരിധികൾ മനസ്സിലാക്കുന്നത് ശരിയായ നടപ്പിലാക്കലിൽ സഹായിക്കുന്നു:

സാധാരണ വെല്ലുവിളികൾ

  1. ക്ലോക്ക് സമന്വയ പ്രശ്നങ്ങൾ: സിസ്റ്റം സമയം ആശ്രിതത്വങ്ങൾ NTP ക്രമീകരണങ്ങൾ അല്ലെങ്കിൽ ദിനശേഷി മാറ്റങ്ങൾക്കൊപ്പം പ്രശ്നങ്ങൾ ഉണ്ടാക്കാം
  2. 2079-ലെ വർഷം പരിധി: 41-ബിറ്റ് ടൈംസ്റ്റാമ്പ് ഓവർഫ്ലോ ഉയർന്ന തോതിലുള്ള സിസ്റ്റങ്ങൾക്കായി ദീർഘകാല പദ്ധതിയിടൽ ആവശ്യമാണ്
  3. മെഷീൻ ഐഡി മാനേജ്മെന്റ്: വലിയ വിതരണ സംവിധാനങ്ങളിൽ ഏകീകൃത മെഷീൻ ഐഡികൾ ഉറപ്പാക്കുന്നത് സഹകരണത്തെ ആവശ്യമാണ്
  4. സീക്വൻസ് ഓവർഫ്ലോ: അത്യന്തം ഉയർന്ന throughput സാഹചര്യങ്ങൾ 4096 സീക്വൻസുകൾ ഒരു മില്ലിസെക്കൻഡിൽ തീർക്കാൻ ഇടയാക്കാം
  5. ക്രോസ്-മെഷീൻ ഓർഡറിംഗ്: ഐഡുകൾ ഓരോ മെഷീനിലും ഏകീകൃതമാണ്, എന്നാൽ എല്ലാ മെഷീനുകളിലും ആഗോളമായി അല്ല

സ്നോഫ്ലേക്ക് ഐഡുകളുടെ ചരിത്രം

സ്നോഫ്ലേക്ക് ഐഡുകൾ 2010-ൽ ട്വിറ്റർ അവതരിപ്പിച്ചു, വലിയ തോതിൽ വിതരണ, സമയം ക്രമീകരിക്കാവുന്ന ഏകീകൃത തിരിച്ചറിയലുകൾ സൃഷ്ടിക്കുന്ന വെല്ലുവിളി പരിഹരിക്കാൻ. ട്വിറ്ററിന്റെ ഉപയോക്തൃ അടിസ്ഥാനവും ട്വീറ്റ് വോളിയവും പൊട്ടിത്തെറിക്കുമ്പോൾ, പരമ്പരാഗത ഓട്ടോ-ഇൻക്രിമെന്റിംഗ് ഐഡുകൾ അവരുടെ വിതരണ ആർക്കിടെക്ചറിക്ക് മതിയല്ല.

ഈ സംവിധാനം പിന്നീട് ഇൻസ്റ്റാഗ്രാം, ഡിസ്കോർഡ്, മറ്റ് നിരവധി പ്ലാറ്റ്ഫോമുകൾ എന്നിവയുൾപ്പെടെ പ്രധാന ടെക് കമ്പനികൾക്കാൽ സ്വീകരിക്കപ്പെട്ടു, വിതരണ സംവിധാനങ്ങൾക്കായി സ്കെയിലബിള് ഐഡി ജനറേഷൻ ആവശ്യമാണ്.

സ്നോഫ്ലേക്ക് ഐഡി ജനറേറ്റർ കോഡ് ഉദാഹരണങ്ങൾ

നിങ്ങളുടെ ഇഷ്ടപ്പെട്ട പ്രോഗ്രാമിംഗ് ഭാഷയിൽ സ്നോഫ്ലേക്ക് ഐഡി ജനറേഷൻ നടപ്പിലാക്കുക:

1class SnowflakeGenerator {
2  constructor(epoch = 1288834974657, datacenterIdBits = 5, workerIdBits = 5, sequenceBits = 12) {
3    this.epoch = BigInt(epoch);
4    this.datacenterIdBits = datacenterIdBits;
5    this.workerIdBits = workerIdBits;
6    this.sequenceBits = sequenceBits;
7    this.maxDatacenterId = -1n ^ (-1n << BigInt(datacenterIdBits));
8    this.maxWorkerId = -1n ^ (-1n << BigInt(workerIdBits));
9    this.sequenceMask = -1n ^ (-1n << BigInt(sequenceBits));
10    this.workerIdShift = BigInt(sequenceBits);
11    this.datacenterIdShift = BigInt(sequenceBits + workerIdBits);
12    this.timestampLeftShift = BigInt(sequenceBits + workerIdBits + datacenterIdBits);
13    this.sequence = 0n;
14    this.lastTimestamp = -1n;
15  }
16
17  nextId(datacenterId, workerId) {
18    let timestamp = this.currentTimestamp();
19
20    if (timestamp < this.lastTimestamp) {
21      throw new Error('Clock moved backwards. Refusing to generate id');
22    }
23
24    if (timestamp === this.lastTimestamp) {
25      this.sequence = (this.sequence + 1n) & this.sequenceMask;
26      if (this.sequence === 0n) {
27        timestamp = this.tilNextMillis(this.lastTimestamp);
28      }
29    } else {
30      this.sequence = 0n;
31    }
32
33    this.lastTimestamp = timestamp;
34
35    return ((timestamp - this.epoch) << this.timestampLeftShift) |
36           (BigInt(datacenterId) << this.datacenterIdShift) |
37           (BigInt(workerId) << this.workerIdShift) |
38           this.sequence;
39  }
40
41  tilNextMillis(lastTimestamp) {
42    let timestamp = this.currentTimestamp();
43    while (timestamp <= lastTimestamp) {
44      timestamp = this.currentTimestamp();
45    }
46    return timestamp;
47  }
48
49  currentTimestamp() {
50    return BigInt(Date.now());
51  }
52}
53
54// Usage
55const generator = new SnowflakeGenerator();
56const id = generator.nextId(1, 1);
57console.log(`Generated Snowflake ID: ${id}`);
58
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class SnowflakeGenerator { private final long epoch; private final long datacenterIdBits; private final long workerIdBits; private final long sequenceBits; private final long maxDatacenterId; private final long maxWorkerId; private final long workerIdShift; private final long datacenterIdShift; private final long timestampLeftShift; private final long sequenceMask; private long datacenterId; private long workerId; private long sequence = 0L; private long lastTimestamp = -1L; private final Lock lock = new ReentrantLock(); public SnowflakeGenerator(long datacenterId, long workerId) { this.epoch = 1288834974657L; this.datacenterIdBits = 5L; this.workerIdBits = 5L; this.sequenceBits = 12L; this.maxDatacenterId = ~(-1L << datacenterIdBits); this.maxWorkerId = ~(-1L << workerIdBits); this.workerIdShift = sequenceBits; this.datacenterIdShift = sequenceBits + workerIdBits; this.timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; this.sequenceMask = ~(-1L << sequenceBits); if (datacenterId > maxDatacenterId || datacenterId < 0) { throw new IllegalArgumentException("datacenterId can't be greater than maxDatacenterId or less than 0"); } if (workerId > maxWorkerId || workerId < 0) { throw new IllegalArgumentException("workerId can't be greater than maxWorkerId or less than 0"); } this.datacenterId = datacenterId; this.workerId = workerId; } public long nextId() { lock.lock(); try { long timestamp = timeGen(); if (timestamp < lastTimestamp) { throw new RuntimeException("Clock moved backwards. Refusing to generate id"); } if (lastTimestamp == timestamp) { sequence = (sequence + 1) & sequenceMask; if (sequence == 0) { timestamp = tilNextMillis(lastTimestamp); } } else { sequence = 0L; } lastTimestamp = timestamp; return ((timestamp - epoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; } finally { lock.unlock(); } } private long tilNextMillis(long
🔗

ബന്ധപ്പെട്ട ഉപകരണങ്ങൾ

നിങ്ങളുടെ പ്രവർത്തനത്തിന് ഉപയോഗപ്പെടുന്ന കൂടുതൽ ഉപകരണങ്ങൾ കണ്ടെത്തുക.

UUID ജനറേറ്റർ: സർവദേശീയമായി വ്യത്യസ്തമായ തിരിച്ചറിയലുകൾ

ഈ ഉപകരണം പരീക്ഷിക്കുക

നാനോ ഐഡി ജനറേറ്റർ - സുരക്ഷിത URL-സൗഹൃദമായ ഏകീകൃത ഐഡികൾ സൃഷ്ടിക്കുക

ഈ ഉപകരണം പരീക്ഷിക്കുക

യാദൃച്ഛിക പ്രോജക്ട് നാമം ജനറേറ്റർ

ഈ ഉപകരണം പരീക്ഷിക്കുക

വെബ് വികസന പരീക്ഷണത്തിന് റാൻഡം യൂസർ ഏജന്റ് ജനറേറ്റർ

ഈ ഉപകരണം പരീക്ഷിക്കുക

യാദൃച്ഛിക API കീ ജനറേറ്റർ: സുരക്ഷിത 32-അക്ഷര സ്ട്രിംഗുകൾ സൃഷ്ടിക്കുക

ഈ ഉപകരണം പരീക്ഷിക്കുക

പരീക്ഷണത്തിനുള്ള സാധുവായ CPF നമ്പർ ജനറേറ്റർ

ഈ ഉപകരണം പരീക്ഷിക്കുക

യാദൃച്ഛിക സ്ഥല നിർമ്മാതാവ്: ആഗോള കോഓർഡിനേറ്റ് സൃഷ്ടികർത്താവ്

ഈ ഉപകരണം പരീക്ഷിക്കുക

എംഡി5 ഹാഷ് ജനറേറ്റർ

ഈ ഉപകരണം പരീക്ഷിക്കുക

പ്രവൃത്തി KSUID ജനറേറ്റർ വ്യത്യസ്ത തിരിച്ചറിയലുകൾക്കായി

ഈ ഉപകരണം പരീക്ഷിക്കുക

കുഞ്ഞുങ്ങളുടെ പേരുകൾ നിർമ്മാതാവ് - അനുയോജ്യമായ പേര് കണ്ടെത്തുക

ഈ ഉപകരണം പരീക്ഷിക്കുക