ASN.1还基于上述的数据类型定义了相关的约束。基于这些约束可定义意义更为明确的对象,这种情况主要应用于具体的场景。比如2.5.1节中星期枚举型的定义,其取值或者取值范围是被限定的。ASN.1中的约束说明比较完善,有单独的文献。有单值约束、值域约束、大小约束,也有类型、模式、属性、时间点等约束。下面简要地示例说明单值、值域、大小约束,因为它们是实际使用中最为常见的约束类型,所使用的符号前文已有定义。
单值约束:将某个类型约束为一个值。定义方法为圆括号中包含被限制的值。如:
OnlyoneValue ::= INTEGER (1 | 2 | 3 | 6)
值域约束:使用区间符号表示值域约束。默认包含区间边界,如果不包含边界则使用大于和小于符号。如:
From2to6 ::= INTEGER (1<..<7)
大小约束:大小约束与值域约束稍微有些差异,指的是对空间大小的限制。如:
--使用String32Len定义的变量其值的字符长度为32
String32Len ::= BIT STRING (SIZE (32))
字符表约束:指的是只取部分字符,使用FROM保留字定义。如:
BooleanValue ::= IA5String (FROM ('T' | 'F'))
包含子类型:将某种子类型包含进来作为其中的一部分。如:
ContainedType ::=INTEGER(INCLUDES OnlyoneValue | 7 | 8)
子类型的Tag与被约束类型的Tag相同。