Per favore dimmi come convalidare GUID in .net ed è unico per sempre?Come convalidare Guid in .net
risposta
Le istruzioni sono uniche 99.9999999999999999999999999999999999% del tempo.
Dipende da cosa intendi per convalidare?
codice per determinare che una stringa GUID è in realtà un GUID, è as follows:
private static Regex isGuid =
new Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);
internal static bool IsGuid(string candidate, out Guid output)
{
bool isValid = false;
output = Guid.Empty;
if(candidate != null)
{
if (isGuid.IsMatch(candidate))
{
output=new Guid(candidate);
isValid = true;
}
}
return isValid;
}
+1 per provare a non usare le eccezioni, -1 perché un 'Guid 'può avere altri formati e il metodo corrente genererà un'eccezione per il seguente caso:" {230a0f8b-81fb-4052-866e-9 ac6a7611c77 " –
+1, in .NET 4.0, vedremo finalmente l'introduzione di' Guid.TryParse() ', che ovviamente sarebbe preferibile usare un Regex. Per ora però, questo è perfettamente sufficiente e accettabile. http://connect.microsoft.com/VisualStudio/feedback/details/94072/guid-tryparse –
I suggerimenti non sono casuali, forse c'è anche un modo per verificare se soddisfano questi criteri: http://blogs.msdn.com /b/oldnewthing/archive/2008/06/27/8659071.aspx –
Non è possibile convalidare l'unicità di GUID. Speri solo che sia stato generato con uno strumento che produce 16 byte unici. Per quanto riguarda la convalida, questo semplice codice potrebbe funzionare (assumendo che avete a che fare con la rappresentazione di stringa del GUID:
bool ValidateGuid(string theGuid)
{
try { Guid aG = new Guid(theGuid); }
catch { return false; }
return true;
}
Questa è la via più semplice. Ricordare che le eccezioni devono essere utilizzate per circostanze eccezionali, non per i tipi di convalida. –
@Kyle Rozendo: Sì, ma con Regex, si limita praticamente il formato della rappresentazione stringa GUID. Ad esempio, nel codice, la formattazione è WITH DASHES only. – Kerido
Sì, non vorremmo mai prendere "la via più facile" quando scrivere tonnellate di codice per fare la stessa cosa è molto meglio ... E se fosse un test unitario? Sarebbe quindi accettabile? – iGanja
Se siete alla ricerca di un modo per determinare se è il formato del reale .Net Guid
tipo, take a look at this article.
2^128 è un numero molto, molto grande: è un miliardo di volte più grande del numero di picosecondi nella vita dell'universo. Troppo grande per un lungo tentativo di convalidare, la risposta è destinata a essere "42", che è il punto di utilizzo: non è necessario. Se ti preoccupi di ottenere duplicati, ti preoccupi per il motivo sbagliato. Le probabilità che la tua macchina venga distrutta da un meteorite atto sono considerevolmente più grandi.
Anatra!
questa domanda è già stata discussa in this post. Si possono trovare dettagli più interessanti
Ecco una risposta non Regex che dovrebbe essere abbastanza veloce:
public static bool IsHex(this char c)
{
return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'));
}
public static bool IsGuid(this string s)
{
// Length of a proper GUID, without any surrounding braces.
const int len_without_braces = 36;
// Delimiter for GUID data parts.
const char delim = '-';
// Delimiter positions.
const int d_0 = 8;
const int d_1 = 13;
const int d_2 = 18;
const int d_3 = 23;
// Before Delimiter positions.
const int bd_0 = 7;
const int bd_1 = 12;
const int bd_2 = 17;
const int bd_3 = 22;
if (s == null)
return false;
if (s.Length != len_without_braces)
return false;
if (s[d_0] != delim ||
s[d_1] != delim ||
s[d_2] != delim ||
s[d_3] != delim)
return false;
for (int i = 0;
i < s.Length;
i = i + (i == bd_0 ||
i == bd_1 ||
i == bd_2 ||
i == bd_3
? 2 : 1))
{
if (!IsHex(s[i])) return false;
}
return true;
}
NET 4, è possibile utilizzare questo metodo di estensione
public static class GuidExtensions
{
public static bool IsGuid(this string value)
{
Guid output;
return Guid.TryParse(value, out output);
}
}
- 1. Guid Byte Order in .NET
- 2. Creare un GUID casuale protetto da crittografia in .NET
- 3. Come convalidare un'espressione regolare?
- 4. Come convertire Guid [] in String?
- 5. Come convalidare la formattazione dell'indirizzo e-mail con .NET Framework?
- 6. Convertire da Oracle RAW (16) a .NET GUID
- 7. come creare GUID?
- 8. Store GUID in MySQL da C#
- 9. come creare GUID in Java EE
- 10. Come posso generare un GUID in Vim?
- 11. Test utilizzando un guid ... come si imposta la variabile su un Guid?
- 12. . Programmazione Net: che cosa convalidare su un certificato autofirmato SSL
- 13. Posso visualizzare GUID in windbg?
- 14. Converti GUID in varchar (32)
- 15. Come convalidare un JTextField?
- 16. Come convalidare scss
- 17. Come convalidare un passaporto?
- 18. Come convalidare PasswordBox WPF
- 19. Come convalidare un array?
- 20. Come convalidare la catena di certificati SSL in ruby con net/http
- 21. Come posso convalidare l'output di XmlSerializer?
- 22. Convalidare json in php
- 23. Come convalidare un oggetto JSON in java?
- 24. Come convalidare una locale in java?
- 25. Come convalidare Campo password in Android
- 26. Come convalidare le parole esatte in Laravel?
- 27. Come convalidare una data MySQL in PHP?
- 28. Come convalidare l'URL in java usando regex?
- 29. come convalidare il modello in forma presentare
- 30. Come convalidare le raccolte in Maps
GUID sono sempre unico se tutti i generatori giocano secondo le regole: http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx –