UUID生成方法
リポジトリ
S/D Appで使う機会があったので調べました
UUID (Universally Unique Identifier)
- 全世界でIDが重複しない程度に桁数が大きい(通り)
- App•サービスごとに都度発行
- Appを削除してから再取得すると異なる値が発行される。
- 各App間で発行されるUUIDには関連がない
- UDID(Unique Device Identifier)をアプリから取得することがiOS5以降非推奨になり、その代わりとして使う
Objective-C(iOS)
FoundationのCFUUIDRef, CFUUIDCreateString, CFReleaseを使う
iOS6以降ではNSUUIDが使える
参考UUIDの作り方 – Objective-C, iOSアプリ開発 i Devris
※CFRelease(NULL) はクラッシュするみたいなので、NULLチェックした方が良さそう
#import <Foundation/Foundation.h> #define RELEASE_CFOBJ(cfobj) (cfobj ? CFRelease(cfobj) : NULL) NSString* genUUID() { CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault); NSString *uuidStr = (__bridge_transfer NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid); //case Non-ARC: NSString *uuidStr = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuid) autorelease]; RELEASE_CFOBJ(uuid); return uuidStr; } int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"\n%@\n%@", genUUID(), [[NSUUID UUID] UUIDString]); } return 0; }
C++(Boost.Uuid)
Boost.Uuidを使えば簡単
boost::uuids::uuid u = boost::uuids::random_generator()();
同じ文字列からはどの環境で生成しても等しい値が得られるようにすることもできる
#include <iostream> #include <boost/uuid/uuid.hpp> #include <boost/uuid/uuid_generators.hpp> #include <boost/uuid/uuid_io.hpp> namespace bUUID = boost::uuids; int main(int argc, const char * argv[]) { bUUID::random_generator rgen; //random bUUID::uuid r1 = rgen(), r2 = rgen(); bUUID::string_generator sgen; //stringでuuid作成 bUUID::uuid s1 = sgen("ABCDEF0123456789abcdef0123456789"), s2 = sgen("0123456789abcdef0123456789abcdef"); bUUID::name_generator ngen(r1); //ngen(s1) //他のuuidをベースにして文字列からUUIDを生成 std::string name = "https://www.google.co.jp/"; bUUID::uuid n1 = ngen(name), n2= ngen(name), n3 = ngen(name+"webhp?hl=ja"); std::cout << "random_generator\n\t" << r1 << "\n\t" << r2 << std::endl << "string_generator\n\t" << s1 << "\n\t" << s2 << std::endl << "name_generator\n\t" << n1 << "\n\t" << n2 << "\n\t" << n3 << std::endl; return 0; }
Java
import java.util.UUID; public class UUIDTest { public static void main(String[] args) { UUID uuid = UUID.randomUUID(); System.out.println(uuid.toString()); } }
Perl
Data::UUIDを使う。入ってない場合は、
sudo perl -MCPAN -e 'install Data::UUID'
でインストール
use Data::UUID; my $uuid = Data::UUID->new; print $uuid->create_str(), "\n";