public static CieStudentData Decode(byte[] encodedAttribute)
        {
            try {
                // decodifica o atributo como string
                var content = Asn1Util.DecodePrintableString(encodedAttribute);
                var cieData = new CieStudentData();

                // nas primeiras 40(quarenta) posições, o nome da instituição de ensino;
                cieData.InstituicaoEnsino = content.Substring(0, 40).Trim();

                // nas 15 (quinze) posições subsequentes, o grau de escolaridade;
                cieData.GrauEscolaridade = content.Substring(40, 15).Trim();

                // nas 30 (trinta) posições subsequentes, o nome do curso
                cieData.Curso = content.Substring(55, 30).Trim();

                // nas 20 (vinte) posições subsequentes, o município da instituição
                cieData.InstituicaoEnsinoCidade = content.Substring(85, content.Length - 85 - 2).Trim();

                // nas 2 (duas) posições subsequentes, a UF domunicípio.
                cieData.InstituicaoEnsinoUF = content.Substring(content.Length - 2, 2).Trim();

                return(cieData);
            } catch (Exception ex) {
                throw new FormatException("Error while decoding CIE student data fields. Invalid format.", ex);
            }
        }
        public static CieStudentIdentity Decode(byte[] encodedAttribute)
        {
            try {
                // decodifica o atributo como string
                var content = Asn1Util.DecodePrintableString(encodedAttribute);
                var cieId   = new CieStudentIdentity();

                // nas primeiras 8 (oito) posições, a data de nascimento do titular, no formato ddmmaaaa;
                cieId.DataNascimento = DateTime.ParseExact(content.Substring(0, 8), "ddMMyyyy", null);

                // nas 11 (onze) posições subsequentes, o Cadastro de Pessoa Física (CPF) do titular;
                cieId.Cpf = content.Substring(8, 11);

                // nas 15 (quinze) posições subsequentes, o número da matrícula do estudante;
                cieId.Matricula = content.Substring(19, 15).TrimStart('0');

                // nas 15(quinze) posições subsequentes, o número do Registro Geral-RG do titular do atributo;
                // nas 10(dez) posições subsequentes, as siglas do órgão expedidor do RG e respectiva UF.
                cieId.RG = content.Substring(34, 15).TrimStart('0');
                if (!string.IsNullOrEmpty(cieId.RG))
                {
                    cieId.RGEmissor   = content.Substring(49, content.Length - 49 - 2).Trim();
                    cieId.RGEmissorUF = content.Substring(content.Length - 2, 2);
                }

                return(cieId);
            } catch (Exception ex) {
                throw new FormatException("Error while decoding CIE student identity fields. Invalid format.", ex);
            }
        }